微軟在Build 2018大會上推出的一款面向.NET開發人員的開源,跨平臺機器學習框架ML.NET。 ML.NET將容許.NET開發人員開發他們本身的模型,並將自定義ML集成到他們的應用程序中,而無需事先掌握開發或調整機器學習模型的專業知識。在採用通用機器學習語言(如R和Python)開發的模型,並將它們集成到用C#等語言編寫的企業應用程序中須要付出至關大的努力。ML.NET填平了機器學習專家和軟件開發者之間的差距,從而使得機器學習的平民化,即便沒有機器學習背景的人們可以創建和運行模型。經過爲.NET建立高質量的機器學習框架,微軟已經使得將機器學習轉化爲企業(或經過Xamarin移動應用程序)變得更容易。這是一種使機器學習更加可用的形式。html
基於微軟內部Windows,Bing和Azure等主要微軟產品使用多年的機器學習構建的庫目前處於預覽階段,最新版本是0.2 。該框架目前支持的學習模型包括git
其餘技術,如推薦引擎和異常檢測,正在開發的路線圖上。ML.NET將最終將接口暴露給其餘流行的機器學習庫,如TensorFlow,CNTK和Accord.NET。最後,還會有一些工具和語言加強功能,包括Azure和GUI / Visual Studio功能中的擴展功能。github
ML.NET以NuGet包的形式提供,能夠輕鬆安裝到新的或現有的.NET應用程序中。算法
該框架採用了用於其餘機器學習庫(如scikit-learn和Apache Spark MLlib)的「管道(LearningPipeline)」方法。數據經過多個階段「傳送」以產生有用的結果(例如預測)。典型的管道可能涉及apache
管道爲使用機器學習模型提供了一個標準API。這使得在測試和實驗過程當中更容易切換一個模型。它還將建模工做分解爲定義明確的步驟,以便更容易理解現有代碼。scikit-learn庫實現了不少機器學習算法,咱們能夠多多參考scikit-learn :http://sklearn.apachecn.org/cn/0.19.0/index.html 數據結構
ML.NET機器學習管道的核心組件:架構
ML數據結構(例如IDataView
,LearningPipeline
)框架
TextLoader(將數據從分隔文本文件加載到LearningPipeline
)和 CollectionDataSource 從一組對象中加載數據集機器學習
轉換(以得到正確格式的數據進行訓練):函數
TextFeaturizer
ColumnConcatenator
,ColumnSelector
和ColumnDropper
CategoricalOneHotVectorizer
和CategoricalHashOneHotVectorizer
MissingValueHandler
RowTakeFilter
,RowSkipFilter
,RowRangeFilter
FeatureSelectorByCount
和FeatureSelectorByMutualInformation
學習算法(用於訓練機器學習模型)用於各類任務:
FastTreeBinaryClassifier
,StochasticDualCoordinateAscentBinaryClassifier
,AveragedPerceptronBinaryClassifier
,BinaryLogisticRegressor
,FastForestBinaryClassifier
,LinearSvmBinaryClassifier
,和GeneralizedAdditiveModelBinaryClassifier
StochasticDualCoordinateAscentClassifier
,LogisticRegressor
,和NaiveBayesClassifier
FastTreeRegressor
,FastTreeTweedieRegressor
,StochasticDualCoordinateAscentRegressor
,OrdinaryLeastSquaresRegressor
,OnlineGradientDescentRegressor
,PoissonRegressor
,和GeneralizedAdditiveModelRegressor
聚類 KMeansPlusPlusClusterer
評估器(檢查模型的工做狀況):
BinaryClassificationEvaluator
ClassificationEvaluator
RegressionEvaluator
在構建機器學習模型時,首先須要定義您但願經過數據實現的目標。以後,您能夠針對您的狀況選擇正確的機器學習任務。如下列表描述了您能夠選擇的不一樣機器學習任務以及一些常見用例。在ML.NET 0.2增長了一個 支持從一組對象中加載數據集的能力,之前這些只能從分隔的文本文件加載。另外一個補充是交叉驗證,這是一種驗證機器學習模型性能的方法。交叉驗證方法的一個有用方面是它不須要與用於建立模型的數據集分開的數據集。相反,它將屢次提供的數據劃分爲不一樣組的訓練和測試數據。ML.NET 0.2加入了一個示例代碼庫,演示瞭如何使用這個新框架,地址是https://github.com/dotnet/machinelearning-samples。
二元分類屬於 監督學習,用於預測數據的一個實例屬於哪些兩個類(類別)任務。分類算法的輸入是一組標記示例,其中每一個標記都是0或1的整數。二進制分類算法的輸出是一個分類器,您可使用該分類器來預測新的未標記實例的類。二元分類場景的例子包括:
將Twitter評論的情緒理解爲「積極」或「消極」。
診斷患者是否患有某種疾病。
決定將電子郵件標記爲「垃圾郵件」。
有關更多信息,請參閱Wikipedia上的二元分類 文章。
多元分類屬於 監督學習,用於預測的數據的實例的類(類別)的任務。分類算法的輸入是一組標記示例。每一個標籤都是0到k-1之間的整數,其中k是類的數量。分類算法的輸出是一個分類器,您可使用它來預測新的未標記實例的類。多類分類方案的例子包括:
有關更多信息,請參閱Wikipedia上的多類分類文章。
分類步驟設置:
聚類屬於無監督機器學習,用於數據的一組實例爲包含相似特徵的簇的任務。聚類還可用於識別數據集中的關係,這些關係可能不是經過瀏覽或簡單觀察而在邏輯上得出的。聚類算法的輸入和輸出取決於所選擇的方法。您能夠採用分佈、質心、連通性或基於密度的方法。ML.NET目前支持使用K-Means聚類的基於質心的方法。聚類場景的例子包括:
聚類設置步驟:
迴歸是 監督的機器學習,用於從一組相關的功能預測標籤的值。標籤能夠具備任何實際價值,而且不像分類任務那樣來自有限的一組值。迴歸算法對標籤對其相關特徵的依賴性進行建模,以肯定標籤隨着特徵值的變化而如何變化。迴歸算法的輸入是一組具備已知值標籤的示例。迴歸算法的輸出是一個函數,您可使用該函數來預測任何新的輸入要素集的標註值。迴歸情景的例子包括: