{"id":20785,"date":"2021-11-12T19:57:03","date_gmt":"2021-11-12T14:27:03","guid":{"rendered":"http:\/\/ismiletechnologies.com\/?p=20785"},"modified":"2021-12-16T16:32:22","modified_gmt":"2021-12-16T11:02:22","slug":"how-to-apply-xgboost-algorithm-using-r","status":"publish","type":"post","link":"https:\/\/ismiletechnologies.com\/en_us\/technology\/how-to-apply-xgboost-algorithm-using-r\/","title":{"rendered":"How to apply XGBOOST algorithm using R"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"20785\" class=\"elementor elementor-20785\" data-elementor-post-type=\"post\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-7b17770 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"7b17770\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-5cd6d2d\" data-id=\"5cd6d2d\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-8428706 elementor-widget elementor-widget-text-editor\" data-id=\"8428706\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><span class=\"TextRun SCXW44472044 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW44472044 BCX0\">Extreme Gradient Boosting (<\/span><span class=\"NormalTextRun SpellingErrorV2 SCXW44472044 BCX0\">xgboost<\/span><span class=\"NormalTextRun SCXW44472044 BCX0\">) is a powerful <a href=\"http:\/\/ismiletechnologies.com\/ai-and-machine-learning\/\"><span style=\"color: #333399;\">machine learning<\/span><\/a> algorithm and is one of the popular winning recipes. Over the past few years, predictive modeling has been termed as fast and accurate. Most of the tedious work can be done using this algorithm. Compared to the random forest and neural networks, <a href=\"https:\/\/en.wikipedia.org\/wiki\/XGBoost\"><span style=\"color: #333399;\">XGBOOST<\/span><\/a> has better efficiency, accuracy, and feasibility. The latest implementation on\u00a0<\/span><span class=\"NormalTextRun SpellingErrorV2 SCXW44472044 BCX0\">xgboost<\/span><span class=\"NormalTextRun SCXW44472044 BCX0\">\u00a0was launched in August 2015. Also, it is 10 times faster than existing gradient boosting implementations.<\/span><\/span><span class=\"EOP SCXW44472044 BCX0\" data-ccp-props=\"{\">\u00a0<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2e7d5b1 elementor-widget elementor-widget-heading\" data-id=\"2e7d5b1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">How to build models using Xgboost on R: <\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f30e452 elementor-widget elementor-widget-text-editor\" data-id=\"f30e452\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"text-decoration: underline;\"><span style=\"color: #000000; text-decoration: underline;\"><span class=\"TextRun Underlined SCXW176030950 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW176030950 BCX0\">1. Load all the libraries<\/span><\/span><span class=\"EOP SCXW176030950 BCX0\" data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/span><\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-76f755a elementor-widget elementor-widget-code-highlight\" data-id=\"76f755a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript \">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>library(xgboost) \r\nlibrary(readr) \r\nlibrary(stringr) \r\nlibrary(caret) \r\nlibrary(car) <\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-44bccc5 elementor-widget elementor-widget-text-editor\" data-id=\"44bccc5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"text-decoration: underline;\"><span style=\"color: #000000; text-decoration: underline;\">2. Then load the dataset:\u00a0<br \/><\/span><\/span><span data-contrast=\"auto\">For instance, I have taken bank data to check whether the customer is eligible for a loan or not.<\/span><span data-ccp-props=\"{\">\u00a0<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5258d2c elementor-widget elementor-widget-code-highlight\" data-id=\"5258d2c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript \">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>set.seed(100) \r\nsetwd(\"C:\\\\Users\\\\ts93856\\\\Desktop\\\\datasource\") \r\n# load data \r\ndf_train = read_csv(\"train_users_2.csv\") \r\ndf_test = read_csv(\"test_users.csv\") \r\n\r\n# Loading labels of train data \r\n\r\nlabels = df_train['labels'] \r\ndf_train = df_train[-grep('labels', colnames(df_train))] \r\n# combine train and test data \r\ndf_all = rbind(df_train,df_test) <\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-daa1cce elementor-widget elementor-widget-text-editor\" data-id=\"daa1cce\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"text-decoration: underline;\"><span style=\"color: #000000; text-decoration: underline;\"><span class=\"TextRun Underlined SCXW50197579 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW50197579 BCX0\">3. Cleaning the data &amp; featuring it:<\/span><\/span><span class=\"EOP SCXW50197579 BCX0\" data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/span><\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b8fe693 elementor-widget elementor-widget-code-highlight\" data-id=\"b8fe693\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript \">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp># clean Variables :\u202f\u202fhere I clean people with age less than 14 or more than 100 \r\ndf_all[df_all$age < 14 | df_all$age > 100,'age'] <- -1 \r\ndf_all$age[df_all$age < 0] <- mean(df_all$age[df_all$age > 0]) \r\n\r\n# one-hot-encoding categorical features \r\n\r\nohe_feats = c('gender', 'education', 'employer') \r\ndummies <- dummyVars(~\u202fgender + \u202feducation + employer, data = df_all) \r\ndf_all_ohe <- as.data.frame(predict(dummies, newdata = df_all)) \r\ndf_all_combined <- cbind(df_all[,-c(which(colnames(df_all) %in% ohe_feats))],df_all_ohe)df_all_combined$agena <- as.fa <\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-80f6451 elementor-widget elementor-widget-text-editor\" data-id=\"80f6451\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"text-decoration: underline;\"><span style=\"color: #000000; text-decoration: underline;\"><span class=\"TextRun Underlined SCXW99782097 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW99782097 BCX0\">4. Now we have to test and run the model:<\/span><\/span><span class=\"EOP SCXW99782097 BCX0\" data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/span><\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d1ce9dd elementor-widget elementor-widget-code-highlight\" data-id=\"d1ce9dd\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript \">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>xgb <- xgboost(data = data.matrix(X[,-1]),  \r\nlabel = y,  \r\neta = 0.1, \r\nmax_depth = 15,  \r\nnround=25,  \r\nsubsample = 0.5, \r\ncolsample_bytree = 0.5, \r\nseed = 1, \r\neval_metric = \"merror\", \r\nobjective = \"multi:softprob\", \r\nnum_class = 12, \r\nnthread = 3 \r\n) <\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b99494f elementor-widget elementor-widget-text-editor\" data-id=\"b99494f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"text-decoration: underline; color: #000000;\">5. The last step is to score the test population:\u00a0<br \/><\/span><span data-contrast=\"auto\">Here you have an object \u201cxgb,\u201d an\u00a0xgboost\u00a0model. This is the way to score the test population.<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:720,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a1391b5 elementor-widget elementor-widget-code-highlight\" data-id=\"a1391b5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript \">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp># predict values in test set \r\ny_pred <- predict(xgb, data.matrix(X_test[,-1])) <\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c57f212 elementor-widget elementor-widget-heading\" data-id=\"c57f212\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Parameters can be used in xgboost: <\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7bf6cde elementor-widget elementor-widget-text-editor\" data-id=\"7bf6cde\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><span data-contrast=\"auto\">There are 3 types of parameters:<\/span><\/p>\n<p><span data-contrast=\"auto\"><span style=\"color: #000000;\">1. General Parameters \u2013<\/span> Using to do boosting and the model used are tree or linear model. <\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<br \/><\/span><span data-contrast=\"auto\"><span style=\"color: #000000;\">2. Booster parameters \u2013<\/span> Depends on which booster has been chosen. <\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<br \/><\/span><span data-contrast=\"auto\"><span style=\"color: #000000;\">3. Learning Task parameters \u2013<\/span> Helps to decide on learning scenarios, like regression tasks.<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-89f02b6 elementor-widget elementor-widget-heading\" data-id=\"89f02b6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Advanced functionality of xgboost: <\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-85be82f elementor-widget elementor-widget-text-editor\" data-id=\"85be82f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><span data-contrast=\"auto\">Implementing\u00a0xgboost\u00a0is really simple compared to other machine learning techniques. We already have a model, as shown above.\u00a0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Now let\u2019s find the variable importance in the model and subset our variable list:<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9b77583 elementor-widget elementor-widget-code-highlight\" data-id=\"9b77583\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript \">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp># Lets start with finding what the actual tree looks like \r\nmodel <- xgb.dump(xgb, with.stats = T) \r\nmodel[1:10] #This statement prints top 10 nodes of the model \r\n\r\n# Get the feature real names \r\nnames <- dimnames(data.matrix(X[,-1]))[[2]] \r\n\r\n# Compute feature importance matrix \r\nimportance_matrix <- xgb.importance(names, model = xgb) \r\n\r\n# Nice graph \r\nxgb.plot.importance(importance_matrix[1:10,]) \r\n\r\n#In case last step does not work for you because of a version issue, you can try following : \r\nbarplot(importance_matrix[,1]) <\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e36e7b4 elementor-widget elementor-widget-image\" data-id=\"e36e7b4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"1345\" height=\"627\" src=\"https:\/\/ismiletechnologies.com\/wp-content\/uploads\/2021\/11\/image-21.png\" class=\"attachment-full size-full wp-image-20787\" alt=\"\" srcset=\"https:\/\/ismiletechnologies.com\/wp-content\/uploads\/2021\/11\/image-21.png 1345w, https:\/\/ismiletechnologies.com\/wp-content\/uploads\/2021\/11\/image-21-300x140.png 300w, https:\/\/ismiletechnologies.com\/wp-content\/uploads\/2021\/11\/image-21-1024x477.png 1024w, https:\/\/ismiletechnologies.com\/wp-content\/uploads\/2021\/11\/image-21-768x358.png 768w\" sizes=\"(max-width: 1345px) 100vw, 1345px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4cd4dd6 elementor-widget elementor-widget-text-editor\" data-id=\"4cd4dd6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><span class=\"TextRun SCXW229763118 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW229763118 BCX0\">As you can see, there are many variables not worth using in the model, and we are free to remove those variables and run the model again so that we can expect a better accuracy.\u00a0<\/span><\/span><span class=\"EOP SCXW229763118 BCX0\" data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:360,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f5f60cc elementor-widget elementor-widget-heading\" data-id=\"f5f60cc\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Testing whether the result makes sense:  <\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c533837 elementor-widget elementor-widget-text-editor\" data-id=\"c533837\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><span data-contrast=\"auto\">Let\u2019s say age is the variable and the most important one, and there is a <\/span><span data-contrast=\"auto\">simple chi-square test to check whether the variable is important or not.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:360,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d077329 elementor-widget elementor-widget-code-highlight\" data-id=\"d077329\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript \">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>test <- chisq.test(train$Age, output_vector) \r\nprint(test) <\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0bffbe5 elementor-widget elementor-widget-text-editor\" data-id=\"0bffbe5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><span class=\"TextRun SCXW117505606 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW117505606 BCX0\">The same process can be done for all the important variables. And we can identify whether the model has identified the important variables or not.<\/span><\/span><span class=\"EOP SCXW117505606 BCX0\" data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:360,&quot;335559739&quot;:0,&quot;335559740&quot;:240}\">\u00a0<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Extreme Gradient Boosting (xgboost) is a powerful machine learning algorithm and is one of the popular winning recipes. Over the past few years, predictive modeling has been termed as fast and accurate. Most of the tedious work can be done using this algorithm. Compared to the random forest and neural networks, XGBOOST has better efficiency, [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":20914,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19],"tags":[],"class_list":["post-20785","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technology"],"_links":{"self":[{"href":"https:\/\/ismiletechnologies.com\/en_us\/wp-json\/wp\/v2\/posts\/20785","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ismiletechnologies.com\/en_us\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ismiletechnologies.com\/en_us\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ismiletechnologies.com\/en_us\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/ismiletechnologies.com\/en_us\/wp-json\/wp\/v2\/comments?post=20785"}],"version-history":[{"count":18,"href":"https:\/\/ismiletechnologies.com\/en_us\/wp-json\/wp\/v2\/posts\/20785\/revisions"}],"predecessor-version":[{"id":22145,"href":"https:\/\/ismiletechnologies.com\/en_us\/wp-json\/wp\/v2\/posts\/20785\/revisions\/22145"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ismiletechnologies.com\/en_us\/wp-json\/wp\/v2\/media\/20914"}],"wp:attachment":[{"href":"https:\/\/ismiletechnologies.com\/en_us\/wp-json\/wp\/v2\/media?parent=20785"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ismiletechnologies.com\/en_us\/wp-json\/wp\/v2\/categories?post=20785"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ismiletechnologies.com\/en_us\/wp-json\/wp\/v2\/tags?post=20785"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}