劉黎志,彭 貝
1.智能機(jī)器人湖北省重點(diǎn)實(shí)驗(yàn)室(武漢工程大學(xué)),湖北 武漢 430205;2.武漢工程大學(xué)計(jì)算機(jī)科學(xué)與工程學(xué)院,湖北 武漢 430205
近幾年,隨著移動(dòng)互聯(lián)網(wǎng)的迅猛發(fā)展及互聯(lián)網(wǎng)+向服務(wù)、金融、通訊、娛樂、物流、共享經(jīng)濟(jì)等各個(gè)行業(yè)的滲透,數(shù)據(jù)已經(jīng)由被動(dòng)產(chǎn)生過渡到了主動(dòng)產(chǎn)生及自動(dòng)產(chǎn)生階段,大數(shù)據(jù)的概念已經(jīng)是無所不在[1-2]。行業(yè)數(shù)據(jù)量越大,其蘊(yùn)含的信息也就越多,通過有效的數(shù)據(jù)挖掘手段,從大數(shù)據(jù)中獲得知識(shí)的可能性也就越大。傳統(tǒng)的數(shù)據(jù)挖掘及分析技術(shù),一般需要將挖掘的數(shù)據(jù)全部載入計(jì)算機(jī)內(nèi)存,由單個(gè)或多個(gè)CPU 進(jìn)行計(jì)算,其所能處理的數(shù)據(jù)規(guī)模及構(gòu)建挖掘模型的速度已經(jīng)遠(yuǎn)遠(yuǎn)不能滿足大數(shù)據(jù)時(shí)代的需要。大數(shù)據(jù)環(huán)境下的數(shù)據(jù)挖掘需要解決3 個(gè)核心問題:1)構(gòu)建有效的大數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)。2)在存儲(chǔ)結(jié)構(gòu)的基礎(chǔ)上,進(jìn)行大規(guī)模數(shù)據(jù)的并行或分布式計(jì)算,提高構(gòu)建挖掘模型的速度。3)適合于大數(shù)據(jù)挖掘的語言、挖掘算法模型庫及可視化結(jié)果展示[3-5]。大數(shù)據(jù)的分析及挖掘技術(shù),目前也是業(yè)界研究的熱點(diǎn),大規(guī)模數(shù)據(jù)的分類模型[6-8]及邏輯回歸分類問題[9-11]已經(jīng)得到了廣泛的研究。構(gòu)建在Spark 分布式計(jì)算平臺(tái)上的MLib 等大數(shù)據(jù)挖掘模型庫已經(jīng)得到一定程度的應(yīng)用[12-14],本文就如何在Spark 集群環(huán)境下,使用R 語言對(duì)大規(guī)模銀行貸款數(shù)據(jù)進(jìn)行邏輯回歸分類建模進(jìn)行了深入的研究,數(shù)據(jù)來自https://packages.revolutionanalytics.com/datasets/中 的mortDefault.zip 文 件,文件解壓后按貸款人申請(qǐng)貸款年份共10 個(gè)文件,每個(gè)文件有1×106個(gè)記錄。
Apache Spark 是專為大規(guī)模數(shù)據(jù)處理而設(shè)計(jì)的快速通用的分布式計(jì)算引擎,經(jīng)過優(yōu)化的DAG執(zhí)行引擎使得在同等數(shù)據(jù)規(guī)模下,Spark 的處理速度要比Hadoop MapReduce 至少快10 倍以上。Spark 包含數(shù)據(jù)查詢分析庫,機(jī)器學(xué)習(xí)庫(machine learning library,Mlib),并行圖形計(jì)算庫及大規(guī)模實(shí)時(shí)流數(shù)據(jù)處理庫等,開發(fā)人員可以使用R、Pathon、Java、Scala 等語言在這些通用庫的支持下進(jìn)行并行應(yīng)用程序的開發(fā)。目前Spark 可以以獨(dú)立集群方式運(yùn)行,也可以運(yùn)行在Hadoop Yarn 或Apache Mesos 上,且能訪問HDFS、HBase、Hive 等多種數(shù)據(jù)源。由于Spark 分布式計(jì)算引擎具有快速的數(shù)據(jù)處理能力、多語言支持、豐富的通用庫及可跨平臺(tái)等特點(diǎn),使得其得到快速的應(yīng)用,正在形成一個(gè)高速發(fā)展應(yīng)用廣泛的生態(tài)系統(tǒng)。
R 語言是能夠進(jìn)行數(shù)據(jù)處理、計(jì)算、統(tǒng)計(jì)分析和繪圖[15-16],在目前大數(shù)據(jù)環(huán)境下得到廣泛應(yīng)用的一種語言,RStudio Server 對(duì)R 語言進(jìn)行了擴(kuò)展,使其可以運(yùn)行在Spark 集群環(huán)境下。Sparklyr 是一個(gè)基于R 語言,面向大規(guī)模數(shù)據(jù)分析及挖掘的工具包,通過該工具包,用戶可利用RStudio Web 客戶端:1)進(jìn)行Spark 集群遠(yuǎn)程連接管理。2)使用dplyr包對(duì)來源于HDFS、HBase、Hive 的數(shù)據(jù)進(jìn)行查詢、篩選、排序、分組、聚集、連接等操作。3)調(diào)用MLib庫中的算法進(jìn)行大規(guī)模數(shù)據(jù)挖掘,建立模型。4)對(duì)模型進(jìn)行評(píng)價(jià)及預(yù)測(cè)結(jié)果的可視化展示。
邏輯回歸是一種分類方法,主要用于二分類問題(即輸出只有兩種1 或者0,分別代表兩個(gè)類別),邏輯回歸使用非線性的Sigmoid 函數(shù)進(jìn)行分類預(yù)測(cè),函數(shù)形式為:
構(gòu)造預(yù)測(cè)函數(shù)為:
若θ 已知,使用hθ(x )計(jì)算某個(gè)輸入特征變量X,一般認(rèn)為若結(jié)果大于0.5,則預(yù)測(cè)其屬于分類1,否則為分類0。
需要在Spark 集群環(huán)境下進(jìn)行邏輯回歸分類的銀行貸款數(shù)據(jù)存儲(chǔ)在HDFS 文件系統(tǒng)中。Sparklyr 首先通過RStudio 客戶端遠(yuǎn)程連接到Spark 集群,讀取銀行貸款數(shù)據(jù)文件;然后使用dplyr對(duì)數(shù)據(jù)進(jìn)行處理,劃分訓(xùn)練集及測(cè)試集,最后調(diào)用MLib庫中的邏輯回歸算法對(duì)訓(xùn)練集進(jìn)行監(jiān)督學(xué)習(xí),得到能判斷客戶是否能按期歸還貸款的邏輯回歸模型。在集群環(huán)境下得到的模型僅包含回歸系數(shù),而缺少對(duì)模型評(píng)估的參數(shù),對(duì)此本文補(bǔ)充了幾個(gè)重要的性能指標(biāo)來對(duì)模型進(jìn)行評(píng)估,從而深入研究模型的可信性。
2.1.1 數(shù)據(jù)的讀取 以csv 格式存儲(chǔ)抵押貸款數(shù)據(jù)文件按申請(qǐng)年份共10 個(gè),每個(gè)文件含106條記錄,將文件存儲(chǔ)在Hadoop 集群的HDFS 文件系統(tǒng)后,可使用spark_read_csv 函數(shù)讀取文件到Spark集群,格式為:
spark_read_csv(sc,name,path,memory =TRUE/FALSE...)
其中sc 為Spark 集群的連接對(duì)象,name 為讀入到Spark 集群中的表對(duì)象名,path 為數(shù)據(jù)文件在HDFS 文件系統(tǒng)中的路徑,memory 選項(xiàng)表示讀入到Spark 集群中的表對(duì)象是否緩存到集群節(jié)點(diǎn)的內(nèi)存中。例如讀入2000 年抵押貸款的數(shù)據(jù)文件的語句為:
spark_read_csv(sc,"mortYear0”,"hdfs://datanode:9000/mortDefault/mortYear0.csv")
按上述語句格式,依次讀入其它年份的數(shù)據(jù)后,使用dplyr 的union 操作,將所有數(shù)據(jù)組合成為一個(gè)表對(duì)象all-Mort,組合2000 年至2004 年這5 個(gè)年份的語句描述如下:
allMort <-tbl(sc,“mortYear0)%>%union(tbl(sc,”mortYear2“))%>%…%>%union(tbl(sc,”mortYear4))
用戶在將大規(guī)模的數(shù)據(jù)讀入到Spark 集群時(shí),可以根據(jù)數(shù)據(jù)的規(guī)模使用memory 選項(xiàng)控制數(shù)據(jù)是否在Spark 集群節(jié)點(diǎn)的內(nèi)存中緩存,若整個(gè)Spark 集群中的工作節(jié)點(diǎn)內(nèi)存可以容納所有數(shù)據(jù),則選擇memory 為TRUE(默認(rèn)),將數(shù)據(jù)放入節(jié)點(diǎn)內(nèi)存,從而加快數(shù)據(jù)挖掘分析的速度。若大規(guī)模數(shù)據(jù)超過了所有節(jié)點(diǎn)的內(nèi)存容量,則選擇memory為FALSE,將數(shù)據(jù)存放在HDFS 文件系統(tǒng)中,Sparklyr 僅僅讀入數(shù)據(jù)的定義進(jìn)入節(jié)點(diǎn)內(nèi)存,在使用MLib 模型庫對(duì)數(shù)據(jù)進(jìn)行挖掘和分析時(shí),根據(jù)節(jié)點(diǎn)內(nèi)存的大小,從HDFS 文件系統(tǒng)中讀入需要的數(shù)據(jù),從而實(shí)現(xiàn)大規(guī)模數(shù)據(jù)挖掘及分析的可擴(kuò)展化。
2.1.2 類別特征的處理 需要進(jìn)行邏輯回歸分類的原始抵押貸款數(shù)據(jù)格式如表1 所示。
表1 抵押貸款數(shù)據(jù)格式Tab.1 Format of mortgage data
default 為邏輯回歸模型需要預(yù)測(cè)的輸出變量,其它為輸入特征變量,建立邏輯回歸模型需要輸入特征變量均為數(shù)值型,如果輸入特征變量表現(xiàn)為類別特征如顏色、性別、年份,則需要對(duì)類別特征進(jìn)行編碼,規(guī)則如下:
通過上述的編碼方式,抵押貸款數(shù)據(jù)中的year輸入特征會(huì)被映射為N 個(gè)二進(jìn)制量,對(duì)于每條記錄,只有一個(gè)指示特征的值為1,其余為0。在實(shí)際應(yīng)用中,通過選擇一個(gè)類別為參考類別,可用N-1個(gè)二進(jìn)制量對(duì)有N 個(gè)類別的輸入變量進(jìn)行編碼,當(dāng)觀測(cè)數(shù)據(jù)的值與參考類別值相等時(shí),對(duì)應(yīng)的其它類別的N-1 個(gè)二進(jìn)制量全部取值為0。對(duì)于抵押貸款數(shù)據(jù),其year 輸入變量從2000 至2004 共5個(gè)特征,邏輯回歸模型系數(shù)僅包含c(year2001:year2004)這4 個(gè)年份系數(shù),若某條記錄的year 值為2000,則c(year2001:year2004)對(duì)應(yīng)的二進(jìn)制量取值為c(0,0,0,0),若year 為2003,則對(duì)應(yīng)的二進(jìn)制量取值為c(0,0,1,0)。
2.1.3 邏輯回歸分類模型的獲取 邏輯回歸分類的任務(wù)就是以credit、house、Employ、Debt、year 為輸入特征變量,根據(jù)訓(xùn)練集得到回歸模型來預(yù)測(cè)輸出變量default,從而回答抵押貸款人是否會(huì)拖欠貸款。在Spark 集群環(huán)境下的邏輯回歸分類模型的算法描述如下:
算法1:GetMortModel
輸入:抵押貸款文件集合mortFilePathlist
輸出:邏輯回歸模型mortModel
sc ←spark_connect(master='spark 集群Master節(jié)點(diǎn)',
spark_home='集群中spark 的安裝目錄',config='集群環(huán)境配置對(duì)象');//連接spark 集群環(huán)境
for(i=0;mortFile inmortFilePathLst;i++)//讀取每個(gè)年份的抵押貸款文件
mortYeari← spark_read_csv(sc,'mortYeari',hdfs://datanode:9000/'+mortFile');
allMort←union(tbl(sc,mortYeari));//組合文件
end for
allMort$year ←sdf_mutate(year=ftbucketizer(year,c(start-Year:endYear+1)))%>%
mutate(year=as.character(as.integer(year)));//設(shè)置輸入變量year 為類別變量
mlformula←formula(default~credit+house+Employ+Debt+year);//劃分訓(xùn)練集及測(cè)試集,
調(diào)用MLib 中的邏輯回歸算法得到回歸模型
mortPartition←sdf_partition(allMort,training = 0.9,test=0.1,seed=1788);
dfMortTrain ←mortPartition$training;dfMortTest ←mortPartition$test;
mortModel←ml_logistic_regression(dfMortTrain,
ml_formula)//得到回歸模型
return mortModel
根據(jù)算法1,取2000 年至2004 年這5 個(gè)年份的抵押貸款文件,得到的邏輯回歸模型的系數(shù)如表2 所示。
表2 邏輯回歸模型系數(shù)Tab.2 Coefficients of logistic regression model
得到的邏輯回歸模型是否可信任,分類效果如何,分類閾值如何確定,是否能滿足實(shí)際應(yīng)用,需要進(jìn)行評(píng)估,而在集群環(huán)境下得到的模型僅包含回歸系數(shù),缺少對(duì)模型評(píng)估的參數(shù)。因此為了驗(yàn)證獲得的模型的可信性,從以下幾個(gè)方面對(duì)模型進(jìn)行評(píng)估。
2.2.1 偽判定系數(shù)R2設(shè)抵押貸款訓(xùn)練集中的記錄數(shù)量為m,記錄i,i ∈{1 ,m} 的似然函數(shù)Li定義為:
則記錄i 的對(duì)數(shù)似然函數(shù)為:
其中yi為該記錄的是否按期歸還貸款的輸出值,hθ( )
xi為根據(jù)回歸模型mortModel 計(jì)算得到的預(yù)測(cè)值。回歸模型的偏差定義為Dm:
由于邏輯回歸模型是基于極大似然估計(jì)得到的,因此將訓(xùn)練集的對(duì)數(shù)似然最大化也就等同于將模型偏差最小化。根據(jù)回歸模型mortModel 得到訓(xùn)練集預(yù)測(cè)值如算法2 所示。
算法2:Predict
輸入:回歸模型mortModel,訓(xùn)練集dfMortTrain
輸出:回歸模型預(yù)測(cè)值向量yPreds
1.θ ←mortModel$coefficients;//取模型系數(shù)向量
2.for(i=0;i ≤nrow(dfMortTrain);i++)
4.year←根據(jù)類別特征取值規(guī)則,生成輸入變量year的二進(jìn)制向量;
6.yPreds[i]←hθ( xi);//根據(jù)預(yù)測(cè)函數(shù)計(jì)算預(yù)測(cè)值
7.end for
8.return y Pr eds;
得到回歸模型mortModel 的偏差Dm的過程如算法3所示。
算法3:GetModelDeviance
輸入:回歸模型mortModel,訓(xùn)練集dfMortTrain
輸出:回歸模型偏差Dm
1.yLabels ←dfMortTrain[[ ]'default'];//得到訓(xùn)練集中是實(shí)際輸出值
2.yPreds←Predictmort(Model,dfMortTrain);//調(diào)用算法2 得到預(yù)測(cè)值
3.Dm←0;i ←1;
4.for(i=0;i ≤nrow(dfMortTrain;i++)//計(jì)算模型偏差
5.Dm+=-2*(yLabels[i]*log( yP reds[i] )+
(1 - yLabels[i] )*log(1 - yPreds[i] ));
6.end for
7.return Dm;//返回模型偏差
空模型是不使用任何輸入特征變量訓(xùn)練出來的模型,空偏差Dn表示空模型的預(yù)測(cè)值與實(shí)際輸出值之間的模型偏差,空模型的預(yù)測(cè)值為一個(gè)常數(shù)概率,一般取訓(xùn)練集中所有輸出值為1 的記錄所占的百分比。根據(jù)算法3 計(jì)算Dn,只需要將yPreds 的 計(jì) 算 更 改 為yPreds←mean(dfMortTain[['default'])。
偽判定系數(shù)R2定義為:
偽判定系數(shù)R2用于衡量回歸模型相比于默認(rèn)模型在解釋數(shù)據(jù)時(shí)的效果,其值應(yīng)該小于1,若值大于1,則得到的回歸模型就不能被信任,數(shù)據(jù)集就不適合采用邏輯回歸算法進(jìn)行分類預(yù)測(cè)。根據(jù)算法3 得到的Dm為48 153,Dn為92 750,R2為0.481,說明回歸模型mortModel是可信任的。
從統(tǒng)計(jì)學(xué)的角度來檢查模型偏差和空偏差之間的差值是否顯著,可以認(rèn)為差值近似服從卡方分布,即:
其中p 為模型中參數(shù)的個(gè)數(shù),對(duì)于mortModel模型,X 值為44 597,自由度p-1 為8,使用R 語言計(jì)算pchisq(X,p-1,lower.tail=F)得到的p 值為0,說明mortModel的預(yù)測(cè)效果明顯優(yōu)于空模型。
2.2.2 分類評(píng)價(jià)指標(biāo) 確定用戶是否能按期歸還貸款屬于二元分類問題,因此可以以混淆矩陣為基礎(chǔ)來評(píng)價(jià)分類評(píng)價(jià)指標(biāo)。將得到的邏輯回歸模型用于預(yù)測(cè)銀行抵押貸款的訓(xùn)練集,以0.5 為分類閾值(預(yù)測(cè)結(jié)果小于0.5,則default 為0,否則default 為1),將預(yù)測(cè)值與訓(xùn)練集中的實(shí)際default 進(jìn)行比較,得到的混淆矩陣為:
c[1,1]表示正確預(yù)測(cè)default 為0 的記錄個(gè)數(shù);c[2,2]表示正確預(yù)測(cè)default 為1 的記錄個(gè)數(shù);c[1,2]表示將值為0 的default 錯(cuò)誤地預(yù)測(cè)為1 的記錄個(gè)數(shù);c[2,1]表示將值為1 的default 錯(cuò)誤 地 預(yù)測(cè)為0 的記錄個(gè)數(shù)。根據(jù)混淆矩陣可以得到準(zhǔn)確率(accuracy,A),其值用A 表示;真陽性率(true positive rate,TPR)即正確預(yù)測(cè)default 為1 的比例,值用T 表示;假陽性率(false positive rate,F(xiàn)PR)即將default 錯(cuò)誤預(yù)測(cè)為1 的比例,值用F 表示;3 個(gè)分類評(píng)價(jià)指標(biāo),其計(jì)算過程及值如下:
將ROCR 包加載到運(yùn)行在集群環(huán)境中的RStudio Server 中后,使用包中的prediction 及performance 函數(shù)可以得到F 與T 的不同取值的變化曲線,如圖1(a)所示,該曲線稱為接受者操作特征曲線(receiver operating characteristic,ROC),根據(jù)銀行抵押貸款訓(xùn)練集得到的邏輯回歸模型曲線下的區(qū)域面積(area under the curve,AUC)值為0.987 9。
通過上述評(píng)價(jià)指標(biāo),可以知道模型有高的準(zhǔn)確率,低的假陽性率及幾乎接近于1 的AUC值,說明使用模型能準(zhǔn)確的對(duì)用戶是否能按時(shí)歸還貸款進(jìn)行分類。與結(jié)論相矛盾的問題是,以閾值H 等于0.5 進(jìn)行預(yù)測(cè)分類判斷,真陽性率只有不到9%,說明模型不能對(duì)用戶未按時(shí)歸還貸款(default 值為1)進(jìn)行判斷,產(chǎn)生矛盾的原因在于訓(xùn)練集中的大多數(shù)記錄的default 的值為0,從而使得在進(jìn)行模型訓(xùn)練中,產(chǎn)生了傾向性。模型在不同閾值H 下的FPR 與TPR 的對(duì)應(yīng)關(guān)系如圖1(b)所示,從圖中可以發(fā)現(xiàn)當(dāng)H 取0 時(shí),T 與F 均為1,表示所有記錄都被預(yù)測(cè)為default 等于1;隨著H 的增加,F(xiàn) 迅速降低到幾乎接近0,T 則緩慢降低;當(dāng)H 取1 時(shí),T與F 都為0,表示所有記錄都被預(yù)測(cè)default 為0。因此,若在實(shí)際應(yīng)用中要求模型能較準(zhǔn)確的預(yù)測(cè)用戶能否按時(shí)歸還貸款,則可將H 從0.5 的位置向左移取較小值,在提高T 的同時(shí),保持較低的F。
2.2.3 測(cè)試集性能 將通過訓(xùn)練集得到邏輯回歸分類模型對(duì)測(cè)試集中的記錄進(jìn)行預(yù)測(cè),可以模擬檢驗(yàn)?zāi)P驮趯?shí)際應(yīng)用中的表現(xiàn),對(duì)測(cè)試集進(jìn)行預(yù)測(cè)并計(jì)算評(píng)價(jià)指標(biāo)如算法4 所示。
算法4:PrdictMortTest
輸入:回歸模型mortModel,測(cè)試集dfMortTest
輸出:測(cè)試集評(píng)價(jià)指標(biāo)A,T,F 和模型曲線下區(qū)域面積S
1.yPredsTest←Predictmort(Model,dfMortTest);//調(diào) 用算法2 得到測(cè)試集預(yù)測(cè)值
2.yPredsTest←as.numeric(yPredsTest>0.05)//取 分 類閾值為0.05
3.cTest←table(dfMortTest$default,yPredsTest);//得 到測(cè)試集混淆矩陣
4.Get(A,T,F);//根據(jù)式(10)~(12)計(jì)算A,T,F;
5.predObjTest ← prediction(yPredsTest, dfMortTest$default);
6.S←performance(predObjTest,measure='auc')
7.@y.values[[ 1]]; //計(jì)算測(cè)試集里的S
8.return A,T,F,S;
圖1 分類評(píng)價(jià)指標(biāo)圖:(a)F 與T 的不同取值的變化曲線,(b)不同閾值H 下的F 與T 的取值對(duì)應(yīng)關(guān)系Fig.1 Curves of classification evaluation index:(a)change curve of different values of FPR and TPR,(b)corresponding relationship between FPR and TPR under different thresholds
根據(jù)算法4 返回的測(cè)試集評(píng)價(jià)指標(biāo)如下:A 值為0.995,TPR 值為0.504,F(xiàn)PR 值 為0.004,S 值 為0.987。當(dāng)將分類閾值設(shè)置為0.05 用于與測(cè)試集時(shí),TRP 得到顯著的提高,而其它分類指標(biāo)卻沒有降低太多,所以認(rèn)為0.05 為該模型合適的分類閾值。各項(xiàng)評(píng)價(jià)指標(biāo)與回歸模型基本吻合,因此說明可以將該模型進(jìn)行實(shí)際應(yīng)用。
實(shí)驗(yàn)用服務(wù)器為DELL PowerEdge R720,其配置為兩個(gè)物理CPU(Intel Xeon E5-2620 V2 2.10 GHz,每個(gè)CPU 含6 個(gè)內(nèi)核,共12 個(gè)內(nèi)核),32 GB 內(nèi)存,8 TB 硬盤,4 個(gè)物理網(wǎng)卡。服務(wù)器安裝VMWare esxi6.0.0 操作系統(tǒng),虛擬化整個(gè)服務(wù)器環(huán)境。客戶端使用VMWare VSphere client 6.0.0 將服務(wù)器劃分為4 個(gè)虛擬機(jī),每個(gè)虛擬機(jī)的配置為3內(nèi)核CPU,8 GB 內(nèi)存,2 TB 硬盤,1 個(gè)物理網(wǎng)卡。每個(gè)虛擬機(jī)安裝ubuntu-16.04.1-server-amd64 操作系統(tǒng),Hadoop 2.7.3 分布式計(jì)算平臺(tái),組成含1 個(gè)主節(jié)點(diǎn),4 個(gè)數(shù)據(jù)節(jié)點(diǎn)(主節(jié)點(diǎn)也是數(shù)據(jù)節(jié)點(diǎn))的集群,集群中安裝的Spark 版本為2.1.1,同樣配置為4 個(gè)工作節(jié)點(diǎn)。
實(shí)驗(yàn)將R 中串行的glm 算法與MLib 中并行的ml_logistic_regression 算法在邏輯回歸模型的獲取時(shí)間上進(jìn)行比較,具體過程為首先將抵押貸款的10 個(gè)文件合并為allMort 數(shù)據(jù)集,依次劃分訓(xùn)練集為allMort 的10%至90%;然后對(duì)每一個(gè)劃分的訓(xùn)練集分別使用glm 算法及ml_logistic_regression 算法進(jìn)行模型的獲取,每個(gè)算法運(yùn)行3 次,取平均時(shí)間為算法獲取模型的時(shí)間。兩種算法獲取模型時(shí)間t與訓(xùn)練數(shù)據(jù)量d 的關(guān)系比較如圖2 所示。
圖2 獲取模型時(shí)間比較圖Fig.2 Comparison diagram of time for obtaining model
由實(shí)驗(yàn)結(jié)果分析:當(dāng)數(shù)據(jù)量在6×106條以下時(shí),串行算法glm 獲取模型的速度比并行算法ml_logistic_regression 快,但當(dāng)數(shù)據(jù)量超過6×106條時(shí),并行算法獲取模型的速度就優(yōu)于串行算法。除此以外,這一實(shí)驗(yàn)結(jié)果也說明了集群環(huán)境適合在大規(guī)模數(shù)據(jù)下進(jìn)行機(jī)器學(xué)習(xí),構(gòu)建模型,這也是符合了在大數(shù)據(jù)時(shí)代的實(shí)際應(yīng)用特征。
在增加了幾個(gè)模型評(píng)估系數(shù)從而驗(yàn)證了模型可信性的基礎(chǔ)上,通過實(shí)驗(yàn)證明了當(dāng)數(shù)據(jù)量大到一定閾值后,在集群環(huán)境下并行的算法獲得邏輯回歸分類模型的速度要快于對(duì)應(yīng)的串行算法。但在構(gòu)建邏輯回歸模型前,需要對(duì)各個(gè)輸入特征變量進(jìn)行相關(guān)性分析,規(guī)避變量間的多重線性,對(duì)輸入特征進(jìn)行正則化分析,去掉對(duì)預(yù)測(cè)結(jié)果影響不顯著的特征。獲取邏輯回歸模型后,還需要對(duì)獲得的每個(gè)回歸系數(shù)計(jì)算其標(biāo)準(zhǔn)誤差,求出Z 統(tǒng)計(jì)量,對(duì)系數(shù)與預(yù)測(cè)結(jié)果的顯著性水平進(jìn)行評(píng)價(jià),以確定是否在回歸模型中使用該系數(shù)。以上幾點(diǎn),都是在Spark 集群環(huán)境下對(duì)大規(guī)模數(shù)據(jù)進(jìn)行邏輯回歸模型構(gòu)建的后續(xù)研究中需要完善的地方。