{"id":990,"date":"2020-05-23T19:01:47","date_gmt":"2020-05-23T17:01:47","guid":{"rendered":"https:\/\/kindsonthegenius.com\/blog\/?p=990"},"modified":"2020-08-22T14:20:18","modified_gmt":"2020-08-22T12:20:18","slug":"ml-net-tutorial-2-building-a-machine-learning-model-for-classification-2","status":"publish","type":"post","link":"https:\/\/kindsonthegenius.com\/blog\/ml-net-tutorial-2-building-a-machine-learning-model-for-classification-2\/","title":{"rendered":"ML.Net Tutorial 2: Building a Machine Learning Model for Classification"},"content":{"rendered":"<div data-blogger-escaped-style=\"font-family: 'segoe ui';\">\n<p><a href=\"https:\/\/kindsonthegenius.blogspot.com\/2018\/09\/what-is-difference-between-machine.html\" data-blogger-escaped-target=\"_blank\">You could also learn Difference Between Machine Learning and Deep Learning.<\/a>\u00a0This tutorial follows from\u00a0<a href=\"https:\/\/kindsonthegenius.blogspot.com\/2018\/09\/introduction-to-machine-learning-in-net.html\" data-blogger-escaped-target=\"_blank\">Tutorial 1<\/a>\u00a0 where you downloaded your dataset, setup the Visual studio solution and added the ML.Net package to the solution<\/p>\n<\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\"><\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\">\n<p>Take the following steps to create your Machine Learning Model.<\/p>\n<\/div>\n<ol>\n<li><a href=\"#t1\">Understand the Dataset<\/a><\/li>\n<li><a href=\"#s1\">Step 1: Define the Data Structure<\/a><\/li>\n<li><a href=\"#s2\">Step 2: Create a Pipeline and Load the Data<\/a><\/li>\n<li><a href=\"#s3\">Step 3: Transform the Data<\/a><\/li>\n<li><a href=\"#s4\">Step 4: Add a Learning Algorithm<\/a><\/li>\n<li><a href=\"#s5\">Step 5: Train the Model<\/a><\/li>\n<li><a href=\"#s6\">Step 6: Use the Mode to Make Prediction<\/a><\/li>\n<li><a href=\"#s7\">Final Notes<\/a><\/li>\n<\/ol>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\"><\/div>\n<h3 id=\"t1\"><b>Understand the DataSet<\/b><\/h3>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\">\n<p>Open the\u00a0<a href=\"https:\/\/drive.google.com\/open?id=13u40alXY85O6fMC-kK9NUSkN5UFNK6FQ\" data-blogger-escaped-target=\"_blank\">iris-data file<\/a>\u00a0and view the data. Note that each record is made up of five fields. The first four fields are the features while the last field is the class the iris belongs.<\/p>\n<\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\">\n<p>This means that based on the value of the features(SepalLength, SepalWidth, PetalLenght, PetalWidth) we could predict whether the iris belongs to one of the three classes(Iris-setosa, Iris-versicolor, Iris-virginica)<\/p>\n<\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\">\n<p>This scenario is a typical classification problem.<\/p>\n<\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\"><\/div>\n<h3 id=\"s1\"><b>Step 1: Class Classes that map to the Dataset<\/b><\/h3>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\">\n<p>In this step, you need to create the two classes that represents your dataset. The first class represents the features and the second class represents the class.<\/p>\n<\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\">\n<p>The codes for the two classes are given below. You will write this code in the Program.cs file.<\/p>\n<\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\"><\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\"><\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\">\n<div data-blogger-escaped-style=\"background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;\">\n<pre data-blogger-escaped-style=\"line-height: 125%; margin: 0;\">        <span style=\"color: #888888;\" data-blogger-escaped-style=\"color: #888888;\">\/\/STEP 1: Define your data structure. That is clases to hold the data<\/span>\r\n        <span style=\"color: #008800;\" data-blogger-escaped-style=\"color: #008800; font-weight: bold;\">public<\/span> <span style=\"color: #008800;\" data-blogger-escaped-style=\"color: #008800; font-weight: bold;\">class<\/span> <span style=\"color: #bb0066;\" data-blogger-escaped-style=\"color: #bb0066; font-weight: bold;\">IrisData<\/span>\r\n        {   \r\n<span style=\"color: #0000cc;\" data-blogger-escaped-style=\"color: #0000cc;\">            [Column(\"0\")]<\/span>\r\n            <span style=\"color: #008800;\" data-blogger-escaped-style=\"color: #008800; font-weight: bold;\">public<\/span> <span style=\"color: #333399;\" data-blogger-escaped-style=\"color: #333399; font-weight: bold;\">float<\/span> SepalLength;\r\n\r\n<span style=\"color: #0000cc;\" data-blogger-escaped-style=\"color: #0000cc;\">            [Column(\"1\")]<\/span>\r\n            <span style=\"color: #008800;\" data-blogger-escaped-style=\"color: #008800; font-weight: bold;\">public<\/span> <span style=\"color: #333399;\" data-blogger-escaped-style=\"color: #333399; font-weight: bold;\">float<\/span> SepalWidth;\r\n\r\n<span style=\"color: #0000cc;\" data-blogger-escaped-style=\"color: #0000cc;\">            [Column(\"2\")]<\/span>\r\n            <span style=\"color: #008800;\" data-blogger-escaped-style=\"color: #008800; font-weight: bold;\">public<\/span> <span style=\"color: #333399;\" data-blogger-escaped-style=\"color: #333399; font-weight: bold;\">float<\/span> PetalLength;\r\n\r\n<span style=\"color: #0000cc;\" data-blogger-escaped-style=\"color: #0000cc;\">            [Column(\"3\")]<\/span>\r\n            <span style=\"color: #008800;\" data-blogger-escaped-style=\"color: #008800; font-weight: bold;\">public<\/span> <span style=\"color: #333399;\" data-blogger-escaped-style=\"color: #333399; font-weight: bold;\">float<\/span> PetalWidth;\r\n\r\n<span style=\"color: #0000cc;\" data-blogger-escaped-style=\"color: #0000cc;\">            [Column(\"4\")]<\/span>\r\n<span style=\"color: #0000cc;\" data-blogger-escaped-style=\"color: #0000cc;\">            [ColumnName(\"Label\")]<\/span>\r\n            <span style=\"color: #008800;\" data-blogger-escaped-style=\"color: #008800; font-weight: bold;\">public<\/span> <span style=\"color: #333399;\" data-blogger-escaped-style=\"color: #333399; font-weight: bold;\">string<\/span> Label;\r\n        }\r\n<\/pre>\n<\/div>\n<\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\">\n<p>Listing 1.0: IrisData class maps to the features of the dataset<\/p>\n<\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\"><\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\">\n<p>The second class shown below just has one attribute that maps the class name (the last field in the dataset)<\/p>\n<\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\"><\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\">\n<div data-blogger-escaped-style=\"background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;\">\n<pre data-blogger-escaped-style=\"line-height: 125%; margin: 0;\">        <span style=\"color: #888888;\" data-blogger-escaped-style=\"color: #888888;\">\/\/IrisPrediction is the result returned prediction by the model<\/span>\r\n        <span style=\"color: #008800;\" data-blogger-escaped-style=\"color: #008800; font-weight: bold;\">public<\/span> <span style=\"color: #008800;\" data-blogger-escaped-style=\"color: #008800; font-weight: bold;\">class<\/span> <span style=\"color: #bb0066;\" data-blogger-escaped-style=\"color: #bb0066; font-weight: bold;\">IrisPrediction<\/span>\r\n        {\r\n<span style=\"color: #0000cc;\" data-blogger-escaped-style=\"color: #0000cc;\">            [ColumnName(\"PredictedLabel\")]<\/span>\r\n            <span style=\"color: #008800;\" data-blogger-escaped-style=\"color: #008800; font-weight: bold;\">public<\/span> <span style=\"color: #333399;\" data-blogger-escaped-style=\"color: #333399; font-weight: bold;\">string<\/span> PredictedLabels;\r\n        }\r\n<\/pre>\n<\/div>\n<\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\">\n<p>Listing 1.1: Class to hold the prediction<\/p>\n<\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\"><\/div>\n<h3 id=\"s2\"><b>Step 2: Create a Pipeline and Load the Data<\/b><\/h3>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\">\n<p>What is a Pipeline? A pipeline is a set of classes in ML.Net that allows you to load external data, transform it to format suitable for training and train the model.<\/p>\n<\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\">\n<p>Use the code below to load the Iris data set.<\/p>\n<\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\"><\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\"><\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\">\n<div data-blogger-escaped-style=\"background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;\">\n<pre data-blogger-escaped-style=\"line-height: 125%; margin: 0;\">      <span style=\"color: #333399;\" data-blogger-escaped-style=\"color: #333399; font-weight: bold;\">var<\/span> pipeline = <span style=\"color: #008800;\" data-blogger-escaped-style=\"color: #008800; font-weight: bold;\">new<\/span> LearningPipeline();\r\n      <span style=\"color: #333399;\" data-blogger-escaped-style=\"color: #333399; font-weight: bold;\">string<\/span> dataPath = <span data-blogger-escaped-style=\"background-color: #fff0f0;\">\"iris-data.txt\"<\/span>;\r\n      pipeline.Add(<span style=\"color: #008800;\" data-blogger-escaped-style=\"color: #008800; font-weight: bold;\">new<\/span> TextLoader(dataPath).CreateFrom&lt;IrisData&gt;(separator: <span style=\"color: #0044dd;\" data-blogger-escaped-style=\"color: #0044dd;\">','<\/span>));\r\n<\/pre>\n<\/div>\n<\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\">\n<p>Listing 1.3: Create a pipeline and load your data.<\/p>\n<\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\"><\/div>\n<h3 id=\"s3\"><b>Step 3: Transform the Data<\/b><\/h3>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\">\n<p>Data needs to be transformed from string data to numeric data since training can only be carried out on numeric data. So the column labels are assigned numbers. This is achieved by using a Dictionarizer object<\/p>\n<\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\">\n<p>Next the we need to use a ColumnConcatenator to merge all the features into one single string as shown in Listing 1.4.<\/p>\n<\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\"><\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\"><\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\">\n<div data-blogger-escaped-style=\"background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;\">\n<pre data-blogger-escaped-style=\"line-height: 125%; margin: 0;\">     pipeline.Add(<span style=\"color: #008800;\" data-blogger-escaped-style=\"color: #008800; font-weight: bold;\">new<\/span> Dictionarizer(<span data-blogger-escaped-style=\"background-color: #fff0f0;\">\"Label\"<\/span>));\r\n     pipeline.Add(<span style=\"color: #008800;\" data-blogger-escaped-style=\"color: #008800; font-weight: bold;\">new<\/span> ColumnConcatenator(<span data-blogger-escaped-style=\"background-color: #fff0f0;\">\"Features\"<\/span>, <span data-blogger-escaped-style=\"background-color: #fff0f0;\">\"SepalLength\"<\/span>, <span data-blogger-escaped-style=\"background-color: #fff0f0;\">\"SepalWidth\"<\/span>, <span data-blogger-escaped-style=\"background-color: #fff0f0;\">\"PetalLength\"<\/span>, <span data-blogger-escaped-style=\"background-color: #fff0f0;\">\"PetalWidth\"<\/span>));\r\n<\/pre>\n<\/div>\n<\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\">\n<p>Listing 1.4: Transform the data<\/p>\n<\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\"><\/div>\n<h3 id=\"s4\"><b>Step 4: Add a Learning Algorithm<\/b><\/h3>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\">\n<p>Here we add a learning algorithm that can train a classification model. This algorithm is the StochasticDualCoordinateClassifier object.<\/p>\n<\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\">\n<p>Then we convert back the numeric label into the original text using PredictedLabelColumnOriginalValueConverter object.<\/p>\n<\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\"><\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\"><\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\">\n<div data-blogger-escaped-style=\"background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;\">\n<pre data-blogger-escaped-style=\"line-height: 125%; margin: 0;\">     pipeline.Add(<span style=\"color: #008800;\" data-blogger-escaped-style=\"color: #008800; font-weight: bold;\">new<\/span> StochasticDualCoordinateAscentClassifier());\r\n     pipeline.Add(<span style=\"color: #008800;\" data-blogger-escaped-style=\"color: #008800; font-weight: bold;\">new<\/span> PredictedLabelColumnOriginalValueConverter() { PredictedLabelColumn = <span data-blogger-escaped-style=\"background-color: #fff0f0;\">\"PredictedLabel\"<\/span> });\r\n<\/pre>\n<\/div>\n<\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\">\n<p>Listing 1.5: Add a learning algorithm and covert back<\/p>\n<\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\"><\/div>\n<h3 id=\"s5\"><b>Step 5: Train the Model<\/b><\/h3>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\">\n<p>In this step, we simple call the Train() method of the pipeline object to train our model. This is achieved by a single line of code shown in Listing 1.6.<\/p>\n<\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\"><\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\"><\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\">\n<div data-blogger-escaped-style=\"background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;\">\n<pre data-blogger-escaped-style=\"line-height: 125%; margin: 0;\">     <span style=\"color: #333399;\" data-blogger-escaped-style=\"color: #333399; font-weight: bold;\">var<\/span> model = pipeline.Train&lt;IrisData, IrisPrediction&gt;();\r\n<\/pre>\n<\/div>\n<\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\">\n<p>Listing 1.6: Train the model<\/p>\n<\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\"><\/div>\n<h3 id=\"s6\"><b>Step 6: Use the Mode to Make Prediction<\/b><\/h3>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\">\n<p>Now we can now test the model by passing new set of features and then allow the model to predict the class it belongs.<\/p>\n<\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\">\n<p>The code is given in Listing 1.7, but you can change the values to see what result you get.<\/p>\n<\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\"><\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\"><\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\">\n<div data-blogger-escaped-style=\"background: #ffffff; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;\">\n<pre data-blogger-escaped-style=\"line-height: 125%; margin: 0;\">        <span style=\"color: #333399;\" data-blogger-escaped-style=\"color: #333399; font-weight: bold;\">var<\/span> prediction = model.Predict(<span style=\"color: #008800;\" data-blogger-escaped-style=\"color: #008800; font-weight: bold;\">new<\/span> IrisData()\r\n        {\r\n            SepalLength = <span style=\"color: #6600ee;\" data-blogger-escaped-style=\"color: #6600ee; font-weight: bold;\">0.3f<\/span>,\r\n            SepalWidth = <span style=\"color: #6600ee;\" data-blogger-escaped-style=\"color: #6600ee; font-weight: bold;\">0.6f<\/span>,\r\n            PetalLength = <span style=\"color: #6600ee;\" data-blogger-escaped-style=\"color: #6600ee; font-weight: bold;\">1.2f<\/span>,\r\n            PetalWidth = <span style=\"color: #6600ee;\" data-blogger-escaped-style=\"color: #6600ee; font-weight: bold;\">1.1f<\/span>\r\n        });\r\n\r\n        Console.WriteLine(<span style=\"color: #ff0000;\" data-blogger-escaped-style=\"background-color: #ffaaaa; color: red;\">$<\/span><span data-blogger-escaped-style=\"background-color: #fff0f0;\">\"Pridicted flower class is : {prediction.PredictedLabels}\"<\/span>);\r\n        Console.Read();\r\n<\/pre>\n<\/div>\n<\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\">\n<p>Listing 1.7: Making prediction with the trained model<\/p>\n<\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\"><\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\">\n<p>The output of this is shown in Figure 1.0<\/p>\n<\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\"><\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\"><\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\">\n<p>Figure 1.0: Final\u00a0 Output<\/p>\n<\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\"><\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\">\n<p><a href=\"https:\/\/2.bp.blogspot.com\/-5cKuXiGBb2U\/W8EdTf4hKTI\/AAAAAAAACa0\/AHuiy4GLzs4u6EGkcvesBPtTFVITGZWYgCEwYBhgL\/s1600\/Building%2BMachine%2BLearning%2BModel%2BWith%2BML.Net.jpg\" data-blogger-escaped-style=\"clear: left; float: left; margin-bottom: 1em; margin-right: 1em;\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/2.bp.blogspot.com\/-5cKuXiGBb2U\/W8EdTf4hKTI\/AAAAAAAACa0\/AHuiy4GLzs4u6EGkcvesBPtTFVITGZWYgCEwYBhgL\/s640\/Building%2BMachine%2BLearning%2BModel%2BWith%2BML.Net.jpg\" width=\"640\" height=\"300\" border=\"0\" data-blogger-escaped-data-original-height=\"553\" data-blogger-escaped-data-original-width=\"1174\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<h3 id=\"s7\"><b>Final Notes<\/b><\/h3>\n<\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\">\n<p>If you have come this far then be sure you now know the basics of How to Build a Machine Learning Mode using ML.Net.<\/p>\n<\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\">\n<p>This is really interesting for .net developers as you don&#8217;t need to learn how to use other tools like TensorFlow in Jupyter notebook and the Python Language.<\/p>\n<\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\">\n<p>We continues with Tutorial 3.<\/p>\n<\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\"><\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\">\n<p>Subscribe to the\u00a0<a href=\"https:\/\/www.youtube.com\/channel\/UCvHgEAcw6VpcOA3864pSr5A\" data-blogger-escaped-target=\"_blank\">Kindson The Genius Video Channel<\/a>\u00a0so you get notified when new lessons are made.<\/p>\n<\/div>\n<div data-blogger-escaped-style=\"font-family: 'segoe ui';\">\n<ul>\n<li><a href=\"https:\/\/www.youtube.com\/user\/Kindson01\" data-blogger-escaped-target=\"_blank\">Programming Channel<\/a><\/li>\n<li><a href=\"https:\/\/www.youtube.com\/channel\/UCvHgEAcw6VpcOA3864pSr5A\" data-blogger-escaped-target=\"_blank\">Computer Science and Artificial Intelligence Channel<\/a><\/li>\n<li>Join\u00a0<a href=\"https:\/\/www.facebook.com\/groups\/1447709731988533\/\" data-blogger-escaped-target=\"_blank\">International Computer Programmers<\/a>\u00a0to connect with professional programmers.<\/li>\n<\/ul>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>You could also learn Difference Between Machine Learning and Deep Learning.\u00a0This tutorial follows from\u00a0Tutorial 1\u00a0 where you downloaded your dataset, setup the Visual studio solution &hellip; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_mi_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0},"categories":[16,585],"tags":[],"_links":{"self":[{"href":"https:\/\/kindsonthegenius.com\/blog\/wp-json\/wp\/v2\/posts\/990"}],"collection":[{"href":"https:\/\/kindsonthegenius.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kindsonthegenius.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kindsonthegenius.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kindsonthegenius.com\/blog\/wp-json\/wp\/v2\/comments?post=990"}],"version-history":[{"count":4,"href":"https:\/\/kindsonthegenius.com\/blog\/wp-json\/wp\/v2\/posts\/990\/revisions"}],"predecessor-version":[{"id":994,"href":"https:\/\/kindsonthegenius.com\/blog\/wp-json\/wp\/v2\/posts\/990\/revisions\/994"}],"wp:attachment":[{"href":"https:\/\/kindsonthegenius.com\/blog\/wp-json\/wp\/v2\/media?parent=990"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kindsonthegenius.com\/blog\/wp-json\/wp\/v2\/categories?post=990"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kindsonthegenius.com\/blog\/wp-json\/wp\/v2\/tags?post=990"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}