pyspark 隨機(jī)森林的實現(xiàn)
隨機(jī)森林是由許多決策樹構(gòu)成,是一種有監(jiān)督機(jī)器學(xué)習(xí)方法,可以用于分類和回歸,通過合并匯總來自個體決策樹的結(jié)果來進(jìn)行預(yù)測,采用多數(shù)選票作為分類結(jié)果,采用預(yù)測結(jié)果平均值作為回歸結(jié)果。
“森林”的概念很好理解,“隨機(jī)”是針對森林中的每一顆決策樹,有兩種含義:第一種隨機(jī)是數(shù)據(jù)采樣隨機(jī),構(gòu)建決策樹的訓(xùn)練數(shù)據(jù)集通過有放回的隨機(jī)采樣,并且只會選擇一定百分比的樣本,這樣可以在數(shù)據(jù)集合存在噪聲點、異常點的情況下,有些決策樹的構(gòu)造過程中不會選擇到這些噪聲點、異常點從而達(dá)到一定的泛化作用在一定程度上抑制過擬合;第二種隨機(jī)是特征隨機(jī),訓(xùn)練集會包含一系列特征,隨機(jī)選擇一部分特征進(jìn)行決策樹的構(gòu)建。通過這些差異點來訓(xùn)練的每一顆決策樹都會學(xué)習(xí)輸入與輸出的關(guān)系,隨機(jī)森林的強(qiáng)大之處也就在于此。
廢話不多說,直接上代碼:
from pyspark import SparkConf from pyspark.sql import SparkSession from pyspark.ml.linalg import Vectors from pyspark.ml.feature import StringIndexer from pyspark.ml.classification import RandomForestClassifier from pyspark.sql import Row import pandas as pd from sklearn import metrics if __name__ == "__main__": appname = "RandomForestClassifier" master ="local[4]" conf = SparkConf().setAppName(appname).setMaster(master) #spark配置 spark=SparkSession.builder.config(conf=conf).getOrCreate()#spark實例化 #讀取數(shù)據(jù) data=spark.read.csv('良惡性乳腺癌數(shù)據(jù).csv',header=True) #構(gòu)造訓(xùn)練數(shù)據(jù)集 dataSet = data.na.fill('0').rdd.map(list)#用0填充空值 trainData, testData= dataSet.randomSplit([0.7, 0.3], seed=7) trainingSet = trainData.map(lambda x:Row(label=x[-1], features=Vectors.dense(x[:-1]))).toDF() train_num = trainingSet.count() print("訓(xùn)練樣本數(shù):{}".format(train_num)) #使用隨機(jī)森林進(jìn)行訓(xùn)練 stringIndexer = StringIndexer(inputCol="label", outputCol="indexed") si_model = stringIndexer.fit(trainingSet) train_tf = si_model.transform(trainingSet) train_tf.show(5) rf = RandomForestClassifier(numTrees=100, labelCol="indexed", seed=7) rfModel = rf.fit(train_tf) #輸出模型特征重要性、子樹權(quán)重 print("模型特征重要性:{}".format(rfModel.featureImportances)) print("模型特征數(shù):{}".format(rfModel.numFeatures)) #預(yù)測測試集 testSet = testData.map(lambda x:Row(label=x[-1], features=Vectors.dense(x[:-1]))).toDF() test_num=testSet.count() print("測試樣本數(shù):{}".format(test_num)) si_model = stringIndexer.fit(testSet) test_tf = si_model.transform(testSet) predictResult = rfModel.transform(test_tf) predictResult.show(5) spark.stop() #將預(yù)測結(jié)果轉(zhuǎn)為python中的dataframe columns=predictResult.columns#提取強(qiáng)表字段 predictResult=predictResult.take(test_num)# predictResult=pd.DataFrame(predictResult,columns=columns)#轉(zhuǎn)為python中的dataframe #性能評估 y=list(predictResult['indexed']) y_pred=list(predictResult['prediction']) y_predprob=[x[1] for x in list(predictResult['probability'])] precision_score=metrics.precision_score(y, y_pred)#精確率 recall_score=metrics.recall_score(y, y_pred)#召回率 accuracy_score=metrics.accuracy_score(y, y_pred)#準(zhǔn)確率 f1_score=metrics.f1_score(y, y_pred)#F1分?jǐn)?shù) auc_score=metrics.roc_auc_score(y, y_predprob)#auc分?jǐn)?shù) print("精確率:",precision_score )#精確率 print("召回率:",recall_score )#召回率 print("準(zhǔn)確率:",accuracy_score )#準(zhǔn)確率 print("F1分?jǐn)?shù):", f1_score)#F1分?jǐn)?shù) print("auc分?jǐn)?shù):",auc_score )#auc分?jǐn)?shù)
運(yùn)行結(jié)果:
到此這篇關(guān)于pyspark 隨機(jī)森林的實現(xiàn)的文章就介紹到這了,更多相關(guān)pyspark 隨機(jī)森林內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python通過正則表達(dá)式選取callback的方法
這篇文章主要介紹了Python通過正則表達(dá)式選取callback的方法,涉及Python正則表達(dá)式及回調(diào)函數(shù)的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-07-07Python打包后的exe還原成.py的實現(xiàn)步驟
本文主要介紹了Python打包后的exe還原成.py的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02Python unittest單元測試框架實現(xiàn)參數(shù)化
這篇文章主要介紹了Python unittest單元測試框架實現(xiàn)參數(shù)化,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-04-04numpy庫與pandas庫axis=0,axis= 1軸的用法詳解
這篇文章主要介紹了numpy庫與pandas庫axis=0,axis= 1軸的用法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05Python實用秘技之快速優(yōu)化導(dǎo)包順序詳解
這篇文章主要來和大家分享一個Python中的實用秘技,那就是如何快速優(yōu)化導(dǎo)包順序,文中的示例代碼簡潔易懂,快跟隨小編一起學(xué)習(xí)起來吧2023-06-06