Spark-MLlib之分類和迴歸演算法
分類
邏輯迴歸
邏輯迴歸是預測分類響應的常用方法。廣義線性模型的一個特例是預測結果的概率。在spark.ml
邏輯迴歸中,可以使用二項Logistic迴歸來預測二元結果,或者可以使用多項Logistic迴歸來預測多類結果。使用該family
引數在這兩種演算法之間進行選擇,或者保持不設定,Spark將推斷出正確的變數。
通過將
family
引數設定為“多項式”,可以將多項邏輯迴歸用於二進位制分類。它將產生兩組係數和兩個截距。
當在不具有常量非零列的資料集上截斷LogisticRegressionModel時,Spark MLlib為常量非零列輸出零係數。此行為與R glmnet相同,但與LIBSVM不同。
二項Logistic迴歸
欲瞭解更多的背景和有關二項logistic迴歸的實現的詳細資訊,請參閱的檔案中迴歸spark.mllib
。
例子
以下示例顯示如何使用彈性網路正則化訓練二項分類的二項式和多項Logistic迴歸模型。elasticNetParam
對應$ \ alpha $並對應$ \ lambda $。αα和。regParam
λλ
有關引數的更多詳細資訊,請參閱Scala API文件。
import org.apache.spark.ml.classification.LogisticRegression
//載入訓練資料
val training = spark 。 讀。格式(“libsvm” )。load (“data / mllib / sample_libsvm_data.txt” )
val lr = new LogisticRegression ()
。setMaxIter (10 )
。setRegParam (0.3 )
。setElasticNetParam (0.8 )
//適合模型
val lrModel = lr 。適合(訓練)
//列印的迴歸係數和截距
的println (的“係數:$ { lrModel 。係數} 擷取:$ { lrModel 。攔截} ” )
//我們也可以使用多項式族進行二元分類
val mlr = new LogisticRegression ()
。setMaxIter (10 )
。setRegParam (0.3 )
。setElasticNetParam (0.8 )
。setFamily (“multinomial” )
val mlrModel = mlr 。適合(訓練)
//列印的係數和截距與多項家庭迴歸
的println (的“多項式係數:$ { mlrModel 。coefficientMatrix } ” )
的println (的“多項攔截:$ { mlrModel 。interceptVector } ” )
在Spark repo中的“examples / src / main / scala / org / apache / spark / examples / ml / LogisticRegressionWithElasticNetExample.scala”中找到完整的示例程式碼。
spark.ml
邏輯迴歸的實現還支援在訓練集上提取模型的摘要。請注意,這是儲存為預測和指標DataFrame
在LogisticRegressionSummary
被註釋@transient
,因此僅適用於驅動程式。
- Scala
- Java
- Python
繼續前面的例子:
import org.apache.spark.ml.classification.LogisticRegression
//從早期
//示例
val trainingSummary = lrModel中訓練的返回LogisticRegressionModel例項中提取摘要。binarySummary
//獲得每次迭代的目標。
val objectiveHistory = trainingSummary 。objectiveHistory
println (“objectiveHistory:” )
objectiveHistory 。foreach (損失 => println (虧損))
//獲取接收器操作特性作為資料幀和areaUnderROC。
val roc = trainingSummary 。中華民國
ROC 。顯示()
的println (的“areaUnderROC:$ { trainingSummary 。areaUnderROC } ” )
//設定模型閾值以最大化F-Measure
val fMeasure = trainingSummary 。fMeasureByThreshold
val maxFMeasure = fMeasure 。選擇(max (“F-Measure” ))。頭()。getDouble (0 )
val bestThreshold = fMeasure 。where ($ “F-Measure” === maxFMeasure )
。選擇(“閾值” )。頭()。getDouble (0)
lrModel 。setThreshold (bestThreshold )
在Spark repo中的“examples / src / main / scala / org / apache / spark / examples / ml / LogisticRegressionSummaryExample.scala”中找到完整的示例程式碼。
多項邏輯迴歸
通過多項logistic(softmax)迴歸支援多類分類。在多項邏輯迴歸中,演算法產生$ K $係數的集合,或者維度$ K \次J $的矩陣,其中$ K $是結果類的數量,$ J $是特徵的數量。如果演算法符合截距項,則可獲得長度$ K $截距向量。KK組係數,或維數的矩陣,其中是結果類的數量,是特徵的數量。如果演算法與截距項擬合,則可獲得截距的長度向量。K×JK×JKKJJKK
多項係數可用
coefficientMatrix
,截距可用interceptVector
。
coefficients
intercept
不支援使用多項式訓練的邏輯迴歸模型和方法。使用coefficientMatrix
和interceptVector
替代。
結果類$ k \ in {1,2,...,K} $的條件概率使用softmax函式建模。k∈1,2,…,Kk∈1,2,…,K使用softmax函式中的進行建模。
P(Y=k|X,βk,β0k)=eβk⋅X+β0k∑K−1k′=0eβk′⋅X+β0k′P(Y=k|X,βk,β0k)=eβk⋅X+β0k∑k′=0K−1eβk′⋅X+β0k′
我們使用多項式響應模型最小化加權負對數似然,使用彈性網懲罰來控制過度擬合。
minβ,β0−[∑i=1Lwi⋅logP(Y=yi|xi)]+λ[12(1−α)||β||22+α||β||1]minβ,β0−[∑i=1Lwi⋅logP(Y=yi|xi)]+λ[12(1−α)||β||22+α||β||1]
有關詳細的推導,請參閱此處。
例子
以下示例顯示如何使用彈性網路正則化訓練多類邏輯迴歸模型,以及提取用於評估模型的多類訓練摘要。import org.apache.spark.ml.classification.LogisticRegression//載入訓練資料val training = spark 。讀 。格式(“libsvm” )。load (“data / mllib / sample_multiclass_classification_data.txt” )val lr = new LogisticRegression ()。setMaxIter (10 )。setRegParam (0.3 )。setElasticNetParam (0.8 )//適合模型val lrModel = lr 。適合(訓練)//對於列印多項Logistic迴歸係數和截距 的println (的“係數:\ n $ { lrModel 。coefficientMatrix } ” ) 的println (的“攔截:\ n $ { lrModel 。interceptVector } ” )val trainingSummary = lrModel 。概要 //獲得每次迭代的目標val objectiveHistory = trainingSummary 。objectiveHistory println (“objectiveHistory:” ) objectiveHistory 。foreach (println )//對於多類,我們可以在每個標籤的基礎上檢查指標 println (“標籤的誤報率:” ) trainingSummary 。falsePositiveRateByLabel 。zipWithIndex 。foreach { case (rate , label )=> println (s“label $ label :$ rate ” )} println (“標籤真正的正面率:” ) trainingSummary 。truePositiveRateByLabel 。zipWithIndex 。foreach { case (rate , label )=> println (s“label $ label :$ rate ” )} println (“標籤精度:” ) trainingSummary 。precisionByLabel 。zipWithIndex 。foreach { case (prec , label )=> println (s“label $ label :$ prec ” )} println (“召回標籤:” ) trainingSummary 。回憶貝拉貝爾。zipWithIndex 。foreach { case (rec , label )=> println (s“label $ label :$ rec ” )} println (“F-measure by label:” ) trainingSummary 。fMeasureByLabel 。zipWithIndex 。foreach { case (f , label )=> println (s“label $ label :$ f ” )}val accuracy = trainingSummary 。準確度 val falsePositiveRate = trainingSummary 。weightedFalsePositiveRate val truePositiveRate = trainingSummary 。weightedTruePositiveRate val fMeasure = trainingSummary 。weightedFMeasure val precision = trainingSummary 。weightedPrecision val recall = trainingSummary 。weightedRecall println (s“準確度:$ accuracy \ nFPR:$ falsePositiveRate \ nTPR:$ truePositiveRate \ n“ + s”F-measure:$ fMeasure \ nPrecision:$ precision \ nRecall:$ recall “ )
在Spark repo中的“examples / src / main / scala / org / apache / spark / examples / ml / MulticlassLogisticRegressionWithElasticNetExample.scala”中找到完整的示例程式碼。
決策樹分類器
決策樹是一種流行的分類和迴歸方法。有關spark.ml
實施的更多資訊可以在決策樹部分中找到。
例子
以下示例以LibSVM格式載入資料集,將其拆分為訓練和測試集,在第一個資料集上訓練,然後在保留的測試集上進行評估。我們使用兩個特徵變換器來準備資料; 這些幫助標籤和分類功能的索引類別,新增DataFrame
決策樹演算法可識別的元資料。
有關引數的更多詳細資訊,請參閱Scala API文件。
import org.apache.spark.ml.Pipeline
import org.apache.spark.ml.classification.DecisionTreeClassificationModel
import org.apache.spark.ml.classification.DecisionTreeClassifier
import org.apache.spark.ml.evaluation.MulticlassClassificationEvaluator
import org.apache .spark.ml.feature。{ IndexToString , StringIndexer , VectorIndexer }
//將以LIBSVM格式儲存的資料載入為DataFrame。
val data = spark 。讀。格式(“libsvm” )。load (“data / mllib / sample_libsvm_data.txt” )
//索引標籤,將元資料新增到標籤列。
//適合整個資料集以包含索引中的所有標籤。
val labelIndexer = new StringIndexer ()
。setInputCol (“label” )
。setOutputCol (“indexedLabel” )
。fit (data )
//自動識別分類特徵並對其進行索引。
val featureIndexer = new VectorIndexer ()
。setInputCol (“features” )
。setOutputCol (“indexedFeatures” )
。setMaxCategories (4 ) //具有> 4個不同值的要素被視為連續。
。適合(資料)
//將資料拆分為訓練和測試集(30%用於測試)。
val Array (trainingData , testData ) = 資料。randomSplit (陣列(0.7 , 0.3 ))
//訓練DecisionTree模型。
val dt = new DecisionTreeClassifier ()
。setLabelCol (“indexedLabel” )
。setFeaturesCol (“indexedFeatures” )
//將索引標籤轉換回原始標籤。
val labelConverter = new IndexToString ()
。setInputCol (“預測” )
。setOutputCol (“predictLabel” )
。setLabels (labelIndexer 。標籤)
//管道中的鏈索引器和樹。
val pipeline = new Pipeline ()
。setStages (Array (labelIndexer , featureIndexer , dt , labelConverter ))
//訓練模型。這也執行索引器。
val model = 管道。適合(訓練資料)
// 作出預測。
val 預測 = 模型。變換(testData )
//選擇要顯示的示例行。
預測。select (“predictLabel” , “label” , “features” )。節目(5 )
//選擇(預測,真實標籤)並計算測試錯誤。
val evaluator = new MulticlassClassificationEvaluator ()
。setLabelCol (“indexedLabel” )
。setPredictionCol (“預測” )
。setMetricName (“精度” )
VAL 精度 = 求值。評估(預測)
println (s“測試錯誤= $ { (1.0 - 準確度)} ” )
val treeModel = model 。階段(2 )。asInstanceOf [ DecisionTreeClassificationModel ]
的println (的“學習的分類樹模型:\ n $ { 的TreeModel 。toDebugString } ” )
在Spark repo中的“examples / src / main / scala / org / apache / spark / examples / ml / DecisionTreeClassificationExample.scala”中找到完整的示例程式碼。
隨機分類器
隨機是一種流行的分類和迴歸方法。有關spark.ml
實施的更多資訊可以在隨機部分中找到。
例子
以下示例以LibSVM格式載入資料集,將其拆分為訓練和測試集,在第一個資料集上訓練,然後在保留的測試集上進行評估。我們使用兩個特徵變換器來準備資料; 這些有助於標籤和分類功能的索引類別,將DataFrame
基於樹的演算法可識別的元資料新增到其中。
import org.apache.spark.ml.Pipeline
import org.apache.spark.ml.classification。{ RandomForestClassificationModel , RandomForestClassifier }
import org.apache.spark.ml.evaluation.MulticlassClassificationEvaluator
import org.apache.spark.ml.feature。{ IndexToString , StringIndexer , VectorIndexer }
//載入並解析資料檔案,將其轉換為DataFrame。
val data = spark 。讀。格式(“libsvm” )。load (“data / mllib / sample_libsvm_data.txt” )
//索引標籤,將元資料新增到標籤列。
//適合整個資料集以包含索引中的所有標籤。
val labelIndexer = new StringIndexer ()
。setInputCol (“label” )
。setOutputCol (“indexedLabel” )
。fit (data )
//自動識別分類特徵並對其進行索引。
//設定maxCategories,使> 4個不同值的特徵被視為連續。
val featureIndexer = new VectorIndexer ()
。setInputCol (“功能” )
。setOutputCol (“indexedFeatures” )
。setMaxCategories (4 )
。適合(資料)
//將資料拆分為訓練和測試集(30%用於測試)。
val Array (trainingData , testData ) = 資料。randomSplit (陣列(0.7 , 0.3 ))
//訓練一個RandomForest模型。
val rf = new RandomForestClassifier ()
。setLabelCol (“indexedLabel” )
。setFeaturesCol (“indexedFeatures” )
。setNumTrees (10 )
//將索引標籤轉換回原始標籤。
val labelConverter = new IndexToString ()
。setInputCol (“預測” )
。setOutputCol (“predictLabel” )
。setLabels (labelIndexer 。標籤)
//管道中的鏈索引器和林。
val pipeline = new Pipeline ()
。setStages (Array (labelIndexer , featureIndexer , rf , labelConverter ))
//訓練模型。這也執行索引器。
val model = 管道。適合(訓練資料)
// 作出預測。
val 預測 = 模型。變換(testData )
//選擇要顯示的示例行。
預測。select (“predictLabel” , “label” , “features” )。節目(5 )
//選擇(預測,真實標籤)並計算測試錯誤。
val evaluator = new MulticlassClassificationEvaluator ()
。setLabelCol (“indexedLabel” )
。setPredictionCol (“預測” )
。setMetricName (“精度” )
VAL 精度 = 求值。評估(預測)
println (s“測試錯誤= $ { (1.0 - 準確度)} ” )
val rfModel = model 。階段(2 )。asInstanceOf [ RandomForestClassificationModel ]
的println (的“學習的分類林模型:\ n $ { rfModel 。toDebugString } ” )
在Spark repo中的“examples / src / main / scala / org / apache / spark / examples / ml / RandomForestClassifierExample.scala”中找到完整的示例程式碼。
Gradient-boosted樹分類器
Gradient-boosted樹(GBT)是使用決策樹集合的流行分類和迴歸方法。有關spark.ml
實施的更多資訊可以在GBT部分中找到。
例子
以下示例以LibSVM格式載入資料集,將其拆分為訓練和測試集,在第一個資料集上訓練,然後在保留的測試集上進行評估。我們使用兩個特徵變換器來準備資料; 這些有助於標籤和分類功能的索引類別,將DataFrame
基於樹的演算法可識別的元資料新增到其中。
import org.apache.spark.ml.Pipeline
import org.apache.spark.ml.classification。{ GBTClassificationModel , GBTClassifier }
import org.apache.spark.ml.evaluation.MulticlassClassificationEvaluator
import org.apache.spark.ml.feature。{ IndexToString , StringIndexer , VectorIndexer }
//載入並解析資料檔案,將其轉換為DataFrame。
val data = spark 。讀。格式(“libsvm” )。load (“data / mllib / sample_libsvm_data.txt” )
//索引標籤,將元資料新增到標籤列。
//適合整個資料集以包含索引中的所有標籤。
val labelIndexer = new StringIndexer ()
。setInputCol (“label” )
。setOutputCol (“indexedLabel” )
。fit (data )
//自動識別分類特徵並對其進行索引。
//設定maxCategories,使> 4個不同值的特徵被視為連續。
val featureIndexer = new VectorIndexer ()
。setInputCol (“功能” )
。setOutputCol (“indexedFeatures” )
。setMaxCategories (4 )
。適合(資料)
//將資料拆分為訓練和測試集(30%用於測試)。
val Array (trainingData , testData ) = 資料。randomSplit (陣列(0.7 , 0.3 ))
//訓練GBT模型。
val gbt = new GBTClassifier ()
。setLabelCol (“indexedLabel” )
。setFeaturesCol (“indexedFeatures” )
。setMaxIter (10 )
。setFeatureSubsetStrategy (“auto” )
//將索引標籤轉換回原始標籤。
val labelConverter =
相關推薦
Spark-MLlib之分類和迴歸演算法
分類
邏輯迴歸
邏輯迴歸是預測分類響應的常用方法。廣義線性模型的一個特例是預測結果的概率。在spark.ml邏輯迴歸中,可以使用二項Logistic迴歸來預測二元結果,或者可以使用多項Logistic迴歸來預測多類結果。使用該family 引數在這兩種演算法之間進行選擇,
spark mllib之分類和迴歸
Problem Type Supported Methods
二分類: 線性SVM(inear SVMs,), 羅輯迴歸(logistic regression), 決策樹(decision trees),隨機森林(random forests),
Spark MLlib 之 aggregate和treeAggregate從原理到應用
數據量 hash oom 向上 gre require 圖片 iterator reac
在閱讀spark mllib源碼的時候,發現一個出鏡率很高的函數——aggregate和treeAggregate,比如matrix.columnSimilarities()中。為了
機器學習之分類和迴歸區別闡述
很多人分不清楚分類和迴歸,我來講一下,我們經常會碰到這樣的問題:
1、如何將信用卡申請人分為低、中、高風險群?
2、如何預測哪些顧客在未來半年內會取消該公司服務,哪些電話使用者會申請增值服務?
3、如何預測具有某些特徵的顧客是否會購買一臺新的計算機?
4、如何預測病人應當接受三種
Python Spark MLlib 之決策樹迴歸分析
資料準備
場景:預測共享單車租借數量。
特徵:季節、月份、時間(0~23)、節假日、星期、工作日、天氣、溫度、體感溫度、溼度、風速
預測目標:每一小時的單車租用數量
1、下載資料集並開啟
終端輸入命令
cd ~/pythonwork/Pyth
Spark MLlib Logistic Regression邏輯迴歸演算法
1.1 邏輯迴歸演算法
1.1.1 基礎理論
logistic迴歸本質上是線性迴歸,只是在特徵到結果的對映中加入了一層函式對映,即先把特徵線性求和,然後使用函式g(z)將最為假設函式來預測。g(z)可以將連續值對映到0和1上。
它與線性迴歸的不同點在於:為了將線性迴歸輸出的
Spark MLlib中分類和回歸算法
決策樹 隨機 函數 fit ges sgd 集中 eba 字段類型 Spark MLlib中分類和回歸算法:
-分類算法:
pyspark.mllib.classification
-樸素貝葉斯 Na
Spark MLlib Linear Regression線性迴歸演算法
1、Spark MLlib
Linear Regression線性迴歸演算法
1.1 線性迴歸演算法
1.1.1 基礎理論
在統計學中,線性迴歸(Linear Regression)是利用稱為線性迴歸
機器學習演算法之CART(分類和迴歸樹)
CART演算法介紹:
分類和迴歸樹(CART)是應用廣泛的決策樹學習方法。CART同樣由特徵選擇,樹的生成和減枝組成,既可以用於分類也可以用於迴歸。CART的生成就是遞迴的構建二叉決策樹的過程。對迴歸樹用平方誤差最小化(RMSE),對分類樹用基尼指數最小化準則
Python Spark MLlib之邏輯迴歸
資料準備
和決策樹分類一樣,依然使用StumbleUpon Evergreen資料進行實驗。
Local模式啟動ipython notebook
cd ~/pythonwork/ipynotebook
PYSPARK_DRIVER_PYTHON=
Spark機器學習之分類與迴歸
本頁面介紹了分類和迴歸的演算法。 它還包括討論特定類別的演算法的部分,如線性方法,樹和集合體。
目錄
分類 Classification
-----------邏輯迴歸 Logistic regression
-------------------二項式邏輯迴
Spark MLlib中KMeans聚類演算法的解析和應用
聚類演算法是機器學習中的一種無監督學習演算法,它在資料科學領域應用場景很廣泛,比如基於使用者購買行為、興趣等來構建推薦系統。
核心思想可以理解為,在給定的資料集中(資料集中的每個元素有可被觀察的n個屬性),使用聚類演算法將資料集劃分為k個子集,並且要求每個子集內部的元素之間的差異度儘可能低,而不同子集元素的差
Spark MLlib之使用Breeze操作矩陣向量
nds 求解 package cep 步長 ani 最小值 create 應該 這下面的練習中,需要自己將spark的jar包 添加進來。
在使用Breeze 庫時,需要導入相關包:
import breeze.linalg._
import breeze.numeri
Spark MLlib 之 Vector向量深入淺出
org 格式 types 有監督 sea text posit blog get
Spark MLlib裏面提供了幾種基本的數據類型,雖然大部分在調包的時候用不到,但是在自己寫算法的時候,還是很需要了解的。MLlib支持單機版本的local vectors向量和marti
Spark MLlib 之 大規模數據集的相似度計算原理探索
tis afr 廣播 圖片 times 導致 coord 向量 校驗
無論是ICF基於物品的協同過濾、UCF基於用戶的協同過濾、基於內容的推薦,最基本的環節都是計算相似度。如果樣本特征維度很高或者<user, item, score>的維度很大,都會導致無法直
14.spark mllib之快速入門
獨立性 num 索引 ecos ive 組成 compute || eat 簡介
??MLlib是Spark提供提供機器學習的庫,專為在集群上並行運行的情況而設計。MLlib包含很多機器學習算法,可在Spark支持的所有編程語言中使用。
??MLlib設計理念是將數據以RD
Spark MLlib之水塘抽樣算法(Reservoir Sampling)
抽樣 返回 算法 蓄水池抽樣 seq pack param long nds 1.理解 問題定義可以簡化如下:在不知道文件總行數的情況下,如何從文件中隨機的抽取一行?
首先想到的是我們做過類似的題目嗎?當然,在知道文件行數的情況下,我們可以很容易的用C運行庫的rand
資料探勘領域中的分類和迴歸區別是什麼?
先簡單的說下吧,下面給出實際例子
類和迴歸的區別在於輸出變數的型別。定量輸出稱為迴歸,或者說是連續變數預測;定性輸出稱為分類,或者說是離散變數預測。舉個例子:預測明天的氣溫是多少度,這是一個迴歸任務;預測明天是陰、晴還是雨,就是一個分類任務。
拿支援向量機舉個例子,分類問題
分類和迴歸的區別(在CNN中)
兩者的本質相同,分類和迴歸的區別在於輸出變數的型別。
定量——連續——迴歸
定性——離散——分類
用於迴歸:最後一層有m個神經元,每個神經元輸出一個標量,m個神經元的輸出可以看作向量V,現全部連到一個神經元上,則這個神經元的輸出為wx+b,是一個連續值,可以處理迴歸問題
用於分類:現
手擼RNN分類和迴歸,1024!
記錄下最近看莫凡大佬的python教程中,如何手擼RNN分類和迴歸兩種實現方式。
分類實現(具體需要主要的細節已經在程式碼中備註):
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input