1. 程式人生 > >spark(1.1) mllib 原始碼分析(三)-決策樹

spark(1.1) mllib 原始碼分析(三)-決策樹

本文主要以mllib 1.1版本為基礎,分析決策樹的基本原理與原始碼

 

一、基本原理

 

二、原始碼分析

  1、決策樹構造

    指定決策樹訓練資料集與策略(Strategy)通過train函式就能得到決策樹模型DecisionTreeModel

    決策樹策略包含了:algo(演算法型別:分類、迴歸),impurity(資訊增益計算演算法)、maxDepth(數最大深度)、

             numClassesForClassification(數分類分支數目,為2就是二叉數),maxBins(特徵變數最大的分類數目限制)、

             quantileCalculationStrategy(分位數計算方法)、categoricalFeaturesInfo(每個特徵的分類數目)

      

  2、模型訓練

    (1)DecisionTree的模型訓練函式train主要包含了findSplitsBins、findBestSplits、DecisionTreeModel三部分(入下圖所示,為了方便分析,不重要的程式碼做了刪減)

       步驟一:findSplitsBins找出資料集中每個變數(Features)對應的所有分裂方式

       步驟二:findBestSplits通過計算資訊增益來尋找每個節點的最佳的分裂點

       步驟三:DecisionTreeModel構造決策樹模型

        

相關推薦

spark(1.1) mllib 原始碼分析()-決策

本文主要以mllib 1.1版本為基礎,分析決策樹的基本原理與原始碼   一、基本原理   二、原始碼分析   1、決策樹構造     指定決策樹訓練資料集與策略(Strategy)通過train函式就能得到決策樹模型DecisionTreeModel     決策樹策略包含

spark mllib原始碼分析之隨機森林(Random Forest)(

6. 隨機森林訓練 6.1. 資料結構 6.1.1. Node 樹中的每個節點是一個Node結構 class Node @Since("1.2.0") ( @Since("1.0.0") val id: Int, @S

《深入理解Spark-核心思想與原始碼分析》讀書筆記(1

前兩章 第一章主要是講如何安裝和配置spark,以及如何匯入spark原始碼除錯執行;第二章主要講的是上次那本書《Spark快速大資料分析》的內容,科普一下spark的知識。 第三章 SparkContext的初始化 1. 概述 這章的主要內容就

大資料之Spark)--- Spark核心API,Spark術語,Spark三級排程流程原始碼分析

一、Spark核心API ----------------------------------------------- [SparkContext] 連線到spark叢集,入口點. [HadoopRDD] extends RDD 讀取hadoop

Mosquitto-1.5.4原始碼分析,PUBLISH的實現及函式跳轉關係

客戶端向伺服器傳送資料包(packet)時,首先將資料包放到改傳送佇列中,並不真實發送資料,而是傳送資料就緒訊號,等待loop事件迴圈呼叫的函式db__message_write根據網路連線情況來處理髮送請求;該佇列為單鏈表儲存結構,每次有新資料包需要傳送時,將新資料包插入到連結串列尾部;真正傳

JDK 1.8 LinkedList原始碼分析

概述 Collection是最基本的集合介面,一個Collection代表一組Object的集合,這些Object被稱作Collection的元素。Collection是一個介面,用以提供規範定義,不能被例項化使用。  1.Set(無序、不可重複)  Set集合

1.1spring啟動原始碼分析(ClassPathXmlApplicationContext)

spring啟動原始碼分析(ClassPathXmlApplicationContext) Applicantioncontext uml圖 ClassPathXmlApplicationContext xml 配置檔案專案中的路徑 FileSystemXml

coreutils4.5.1 paste.c原始碼分析

coreutils4.5.1 paste.c原始碼分析 今天天冷,幾天沒出門了。把新買的電熱取暖器放在電腦房,然後拉上窗簾,開始讀原始碼,學習linus,很好玩。 paste這個命令有啥應用場景呢?先學習使用:  head -n 100 a1 a2 ==> a1 <== thi

coreutils-4.5.1 head.c原始碼分析03

今天真是把head.c看懂了。 今天天真冷,我網上購了電熱取暖器,沒送到。但邊聽音樂,邊讀程式碼,感覺也很愜意。 看程式碼不能著急,要慢慢看,也許就像有人講的,郝培強講的,一開始要慢,開始慢,後面才能越看越快。是的。看程式碼,開始要慢。不要著急。 head有幾個選項 -n 行數 -c 位元組數 -q

coreutils4.5.1 dirname.c原始碼分析3

老調重彈,每次先按程式碼量排序,從行數少的程式開始讀,總能有所收穫。比如,在dirname.c中,我發現幾條: 第一、函式和括號可以用空格隔開,很奇怪。如 void usage (int status) 在usage與(中有一個空格,我寫了一個測試程式,也驗證了猜想。 第二、對字元取地址,真怪異!

coreutils4.5.1 basename.c原始碼分析3

coreutils4.5.1 basename.c原始碼分析2 前幾天又重新讀了basename.c對其中去掉字尾的那段,終於理解了。現總結如下; static void remove_suffix (char *name, const char *suffix) {   char *

coreutils4.5.1 uniq.c原始碼分析1

uniq.c這個檔案其實沒讀懂,不過從程式中發現了幾個支點,下次再細細品。 第一。交換兩行的寫法。 #define SWAP_LINES(A, B)            \   do 

coreutils4.5.1 expr.c 原始碼分析2

今天又開始讀程式碼。前段時間看演算法分析相關的書,蒐集了不少演算法相關書籍,感覺自己功力太淺,還是讀讀原始碼吧。好在,讀小說,養成了快速讀書的好習慣,再加不求甚解,把快速+不求甚解利用到讀程式碼上,感覺也很有意思。 今天重點翻了翻expr.c,這個原始碼,很有特色,首先啟用debug功能。 文件中有

Spark MLlib原始碼分析—Word2Vec原始碼詳解

以下程式碼是我依據SparkMLlib(版本1.6)中Word2Vec原始碼改寫而來,基本算是照搬。此版Word2Vec是基於Hierarchical Softmax的Skip-gram模型的實現。 在決定讀懂原始碼前,博主建議讀者先看一下《Word2Vec_

spark mllib原始碼分析之二分類邏輯迴歸evaluation

在邏輯迴歸分類中,我們評價分類器好壞的主要指標有精準率(precision),召回率(recall),F-measure,AUC等,其中最常用的是AUC,它可以綜合評價分類器效能,其他的指標主要偏重一些方面。我們介紹下spark中實現的這些評價指標,便於使用sp

9.1 IIC驅動原始碼分析

學習目標:分析linux核心原始碼下的i2c匯流排驅動 drivers/i2c/busses/i2c-s3c2410.c 和 driver/i2c/chips/eeprom.c 裝置驅動; 一、i2c驅動框架 在drivers/i2c/目錄下檢視檔案結構可看到: 其中, 1)Busses: I

spark mllib原始碼分析之隨機森林(Random Forest)(二)

4. 特徵處理 這部分主要在DecisionTree.scala的findSplitsBins函式,將所有特徵封裝成Split,然後裝箱Bin。首先對split和bin的結構進行說明 4.1. 資料結構 4.1.1. Split cl

spark mllib原始碼分析之DecisionTree與GBDT

我們在前面的文章講過,在spark的實現中,樹模型的依賴鏈是GBDT-> Decision Tree-> Random Forest,前面介紹了最基礎的Random Forest的實現,在此基礎上我們介紹Decision Tree和GBDT的實現

spark mllib原始碼分析之L-BFGS(一)

1. 使用 spark給出的example中涉及到LBFGS有兩個,分別是LBFGSExample.scala和LogisticRegressionWithLBFGSExample.scala,第一個是直接使用LBFGS直接訓練,需要指定一系列優化引數,優

java 1.8 ThreadLocal原始碼分析

1. 關於ThreadLocal 當使用ThreadLocal維護變數時,ThreadLocal為每個使用該變數的執行緒提供獨立的變數副本,所以每一個執行緒都可以獨立地改變自己的副本,而不會影響其它執行緒所對應的副本。從執行緒的角度看,目標變數就象是執