1. 程式人生 > >Spark-MLlib之分類和迴歸演算法

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邏輯迴歸的實現還支援在訓練集上提取模型的摘要。請注意,這是儲存為預測和指標DataFrameLogisticRegressionSummary被註釋@transient,因此僅適用於驅動程式。

繼續前面的例子:

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

coefficientsintercept不支援使用多項式訓練的邏輯迴歸模型和方法。使用coefficientMatrixinterceptVector替代。

結果類$ k \ in {1,2,...,K} $的條件概率使用softmax函式建模。k1,2,,Kk∈1,2,…,K使用softmax函式中的進行建模。

P(Y=k|X,βk,β0k)=eβkX+β0kK1k=0eβkX+β0kP(Y=k|X,βk,β0k)=eβk⋅X+β0k∑k′=0K−1eβk′⋅X+β0k′

我們使用多項式響應模型最小化加權負對數似然,使用彈性網懲罰來控制過度擬合。

minβ,β0[i=1LwilogP(Y=yi|xi)]+λ[12(1α)||β||22+α||β||1]minβ,β0−[∑i=1Lwi⋅log⁡P(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 aggregatetreeAggregate從原理到應用

數據量 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