《人工智能》課件第4章 分類與聚類_第1頁
《人工智能》課件第4章 分類與聚類_第2頁
《人工智能》課件第4章 分類與聚類_第3頁
《人工智能》課件第4章 分類與聚類_第4頁
《人工智能》課件第4章 分類與聚類_第5頁
已閱讀5頁,還剩51頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第4章分類與聚類主要內(nèi)容引言K最近鄰(k-NearestNeighbor)分類算法樸素貝葉斯決策樹隨機(jī)森林K均值聚類算法(K-means)引言

機(jī)器學(xué)習(xí)(MachineLearning,ML)一門多領(lǐng)域交叉學(xué)科,涉及概率論、統(tǒng)計(jì)學(xué)、逼近論、凸分析和算法復(fù)雜度理論等。定義

是一門人工智能的科學(xué),該領(lǐng)域的主要研究對象是人工智能,特別是如何在經(jīng)驗(yàn)學(xué)習(xí)中改善具體算法的性能。

是對能通過經(jīng)驗(yàn)自動改進(jìn)的計(jì)算機(jī)算法的研究。是用數(shù)據(jù)或以往的經(jīng)驗(yàn),以此優(yōu)化計(jì)算機(jī)程序的性能標(biāo)準(zhǔn)。引言ML分類(基于學(xué)習(xí)方式)監(jiān)督學(xué)習(xí)(有導(dǎo)師學(xué)習(xí)):輸入數(shù)據(jù)中有導(dǎo)師信號(標(biāo)簽信息),以概率函數(shù)、代數(shù)函數(shù)或人工神經(jīng)網(wǎng)絡(luò)為基函數(shù)模型,采用迭代計(jì)算方法,學(xué)習(xí)結(jié)果為函數(shù)。無監(jiān)督學(xué)習(xí)(無導(dǎo)師學(xué)習(xí)):輸入數(shù)據(jù)中無導(dǎo)師信號,采用聚類方法,學(xué)習(xí)結(jié)果為類別。典型的無導(dǎo)師學(xué)習(xí)有發(fā)現(xiàn)學(xué)習(xí)、聚類、競爭學(xué)習(xí)等。半監(jiān)督學(xué)習(xí):輸入數(shù)據(jù)中有的有導(dǎo)師信號,有的沒有導(dǎo)師信號。強(qiáng)化學(xué)習(xí)(增強(qiáng)學(xué)習(xí)):以環(huán)境反慣(獎(jiǎng)/懲信號)作為輸入,以統(tǒng)計(jì)和動態(tài)規(guī)劃技術(shù)為指導(dǎo)的一種學(xué)習(xí)方法。引言Scikitlearn(Sklearn)packageSimpleandefficienttoolsforpredictivedataanalysisAccessibletoeverybody,andreusableinvariouscontextsBuiltonNumPy,SciPy,andmatplotlibOpensource,commerciallyusable-BSDlicense/stable/index.html引言Scikitlearn(Sklearn)package引言SklearnInstallationpipinstall-Uscikit-learncondainstallscikit-learncheckingyourinstallationyoucanusepython-mpipshowscikit-learn#toseewhichversionandwherescikit-learnisinstalledpython-mpipfreeze#toseeallpackagesinstalledintheactivevirtualenvcondalistscikit-learn#toseewhichscikit-learnversionisinstalledcondalist#toseeallpackagesinstalledintheactivecondaenvironmentpython-c"importsklearn;sklearn.show_versions()“引言ML基本步驟[1]提出問題理解數(shù)據(jù)數(shù)據(jù)清洗構(gòu)建模型評估模型模型應(yīng)用--[1]/oldwitch/p/12089884.html引言ML基本步驟提出問題分類回歸聚類降維…引言ML基本步驟理解數(shù)據(jù)采集數(shù)據(jù)sklearn.datasets中有練習(xí)數(shù)據(jù)(數(shù)據(jù)要有代表性,數(shù)據(jù)量要合適)導(dǎo)入數(shù)據(jù)pd.csv...查看數(shù)據(jù)集信息data.shape查看數(shù)據(jù)集大?。?shape[0]查看行數(shù);.shape[1]查看列數(shù)df.head()查看前幾行;df.describe()查看數(shù)值數(shù)據(jù)的描述統(tǒng)計(jì)信息;()根據(jù)行數(shù)查看數(shù)據(jù)是否有缺失值,數(shù)據(jù)類型是否合適了解各個(gè)字段的含義,目標(biāo)和特征分別是哪個(gè)字段;也可通過可視化了解數(shù)據(jù)的分布引言ML基本步驟數(shù)據(jù)清洗數(shù)據(jù)預(yù)處理包括缺失值處理、重復(fù)值處理、數(shù)據(jù)類型的轉(zhuǎn)換、字符串?dāng)?shù)據(jù)的規(guī)整缺失值處理(標(biāo)簽數(shù)據(jù)無需填充缺失):數(shù)值數(shù)據(jù):用平均值取代:data[A].fillna(data[A].mean())分類數(shù)據(jù):data[A].value_counts();data[A].fillna("占比最多的類別");data[A].fillna("U")缺失比較多時(shí),填充代表未知的字符串使用模型預(yù)測缺失值,例如:K-NN引言ML基本步驟數(shù)據(jù)清洗數(shù)據(jù)預(yù)處理數(shù)據(jù)歸一化/標(biāo)準(zhǔn)化:模型具有伸縮可變性,如SVM,最好進(jìn)行標(biāo)準(zhǔn)化,避免模型參數(shù)受極值影響;伸縮不變模型,如邏輯回歸,最好也進(jìn)行標(biāo)準(zhǔn)化,可以加快訓(xùn)練速度歸一化/標(biāo)準(zhǔn)化常見兩種方法:min-max,化為[0,1]:(x-min(x))/(max(x)-min(x))/preprocessing.MinMaxScaler;適合分別在有限范圍內(nèi)的數(shù)據(jù),數(shù)值較集中,但min/max不穩(wěn)定會影響結(jié)果Z-core,化為均值為0,方差為1:(x-mean(x))/std(x)/sklearn.preprocessing.scale(),適合最大/最小值未知,或者有超出取值范圍的離散值引言ML基本步驟數(shù)據(jù)清洗特征提取(特征工程.1)(以泰坦尼克項(xiàng)目為例)特征:原始數(shù)據(jù)的抽象表示數(shù)值型數(shù)據(jù)處理:一般可直接使用,或通過運(yùn)算轉(zhuǎn)化為新的特征通過家庭人數(shù)可劃分大小家庭:df.家庭人數(shù)=df.A+df.B+1(自己);df.小家庭=df.家庭人數(shù).map(lambdas:1if2<=s<=4else0)分類型數(shù)據(jù)處理:兩個(gè)類別:性別數(shù)據(jù)分別填充為1、0:df.A=df.A.map({"male":1;"female":0})超過兩個(gè)類別:one-hot編碼,data'=pd.get_dummies(df.A,prefix='前綴');pd.concat([data,data'],axis=1)引言ML基本步驟數(shù)據(jù)清洗特征提?。ㄌ卣鞴こ?1)(以泰坦尼克項(xiàng)目為例)字符串型姓名:每一個(gè)姓名中都包含了稱謂,利用split函數(shù)將稱謂提取出來;.strip用于移除空格;將稱謂進(jìn)行歸類,定義對應(yīng)字典,利用map函數(shù)替換;進(jìn)行one_hot編碼客艙號:a[n]可以取到字符串?dāng)?shù)據(jù)第“n”個(gè)字符;提取之后進(jìn)行one_hot編碼時(shí)間序列數(shù)據(jù),一段時(shí)間定期收集的數(shù)據(jù)-可轉(zhuǎn)成年月日引言ML基本步驟數(shù)據(jù)清洗特征選擇(特征工程.2)計(jì)算各個(gè)特征和標(biāo)簽的相關(guān)性:df'=pd.corr()查看標(biāo)簽對應(yīng)的相關(guān)系數(shù):df'.標(biāo)簽.sort_values(ascending=False)根據(jù)相關(guān)系數(shù)的大小選擇特征列做為模型輸入引言ML基本步驟構(gòu)建模型建立訓(xùn)練數(shù)據(jù)集和測試數(shù)據(jù)集選取訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù)的特征和標(biāo)簽:.loc選取特征列和標(biāo)簽列;train_test_spilt劃分,通常80%為訓(xùn)練數(shù)據(jù)集.shape查看劃分結(jié)果引言ML基本步驟構(gòu)建模型選擇機(jī)器學(xué)習(xí)算法導(dǎo)入算法K-nearestneighborsGaussianNaiveBayes邏輯回歸(logisticregression)隨機(jī)森林(RandomForestsModel)支持向量機(jī)(SupportVectorMachines)GradientBoostingClassifierML基本步驟(續(xù))構(gòu)建模型(續(xù))導(dǎo)入算法(續(xù))數(shù)據(jù)降維:PCA,Isomap數(shù)據(jù)分類:SVC,K-Means線性回歸:LinearRegression創(chuàng)建模型model=LinearRegression()訓(xùn)練模型model.fit(train_X,train_y)引言ML基本步驟模型評估m(xù)odel.score(test_X,test_y),不同的模型指標(biāo)不一樣,分類模型評估準(zhǔn)確率metrics.confusion_matrix:混淆矩陣homogeneity_score:同質(zhì)性,每個(gè)群集只包含單個(gè)類的成員;[0,1],1表示完全同質(zhì)。completeness_score:完整性,給定類的所有成員都分配給同一個(gè)群集。[0,1],1表示完全完整。v_measure_score:同質(zhì)性和完整性的調(diào)和平均值adjusted_mutual_info_score:蘭德系數(shù)ARI,取值范圍[-1,1],值越大,表示與聚類結(jié)果與真實(shí)越吻合,體現(xiàn)的是兩個(gè)數(shù)據(jù)分布的吻合程度引言ML基本步驟模型評估fowlkes_mallows_score:精確率和召回率的幾何平均值,[0,1],越大,越相似。silhouette_score:輪廓系數(shù),[-1,1]同類別越近,不同類別越遠(yuǎn),系數(shù)越大。calinski_harabaz_score:類內(nèi)部協(xié)方差越小,類之間協(xié)方差越大,該數(shù)值越大,聚類效果越好。模型應(yīng)用model.predict(pred_X),得到預(yù)測結(jié)果K最近鄰分類算法K-NearestNeighbor,KNN是一個(gè)理論上比較成熟的方法,也是最簡單的機(jī)器學(xué)習(xí)算法之一思路:如果一個(gè)樣本在特征空間中的K個(gè)最相似(即特征空間中最鄰近)的樣本中的大多數(shù)屬于某一個(gè)類別,則該樣本也屬于這個(gè)類別。K最近鄰分類算法

K最近鄰分類算法基本過程1.準(zhǔn)備數(shù)據(jù),對數(shù)據(jù)進(jìn)行預(yù)處理2.選用合適的數(shù)據(jù)結(jié)構(gòu)存儲訓(xùn)練數(shù)據(jù)和測試元組3.設(shè)定參數(shù),如k4.維護(hù)一個(gè)大小為k的的按距離由大到小的優(yōu)先級隊(duì)列,用于存儲最近鄰訓(xùn)練元組。隨機(jī)從訓(xùn)練元組中選取k個(gè)元組作為初始的最近鄰元組,分別計(jì)算測試元組到這k個(gè)元組的距離,將訓(xùn)練元組標(biāo)號和距離存入優(yōu)先級隊(duì)列K最近鄰分類算法基本過程5.遍歷訓(xùn)練元組集,計(jì)算當(dāng)前訓(xùn)練元組與測試元組的距離,將所得距離L與優(yōu)先級隊(duì)列中的最大距離Lmax,進(jìn)行比較6.若L>=Lmax,則舍棄該元組,遍歷下一個(gè)元組。若L<Lmax,刪除優(yōu)先級隊(duì)列中最大距離的元組,將當(dāng)前訓(xùn)練元組存入優(yōu)先級隊(duì)列7.遍歷完畢,計(jì)算優(yōu)先級隊(duì)列中k個(gè)元組的多數(shù)類,并將其作為測試元組的類別。8.測試元組集測試完畢后計(jì)算誤差率,繼續(xù)設(shè)定不同的k值重新進(jìn)行訓(xùn)練,最后取誤差率最小的k值K最近鄰分類算法算法實(shí)踐Sklearn包內(nèi)置了鳶尾花數(shù)據(jù)集,其中存儲花萼長寬(特征0和1)和花瓣長寬(特征2和3),target存儲花的分類,Iris-setosa(山鳶尾),Iris-versicolor(變色鳶尾)和Iris-virginica(弗吉尼亞鳶尾),分別標(biāo)記為數(shù)字0,1和2。圖4-1山鳶尾、變色鳶尾和弗吉尼亞鳶尾K最近鄰分類算法fromsklearn.datasetsimportload_irisiris=load_iris()iris.datairis.data.shapeiris.targetiris.target.shape#Thesklearn.datasetsmoduleincludesutilitiestoloaddatasets,#includingmethodstoloadandfetchpopularreferencedatasets.#Italsofeaturessomeartificialdatagenerators.K最近鄰分類算法fromsklearn.model_selectionimporttrain_test_splitX_train,X_test,y_train,y_test

=train_test_split(iris.data,iris.target,

test_size=0.25,random_state=33)#sklearn.model_selection.train_test_split(*arrays,**options)K最近鄰分類算法#sklearn.model_selection.train_test_split(*arrays,**options)*arrayssequenceofindexableswithsamelength/shape[0]

Allowedinputsarelists,numpyarrays,scipy-sparsematricesorpandasdataframes.test_sizefloatorint,default=None

Iffloat,shouldbebetween0.0and1.0andrepresenttheproportionofthedatasettoincludeinthetestsplit.Ifint,representstheabsolutenumberoftestsamples.IfNone,thevalueissettothecomplementofthetrainsize.If

train_size

isalsoNone,itwillbesetto0.25.train_sizefloatorint,default=None

Iffloat,shouldbebetween0.0and1.0andrepresenttheproportionofthedatasettoincludeinthetrainsplit.Ifint,representstheabsolutenumberoftrainsamples.IfNone,thevalueisautomaticallysettothecomplementofthetestsize.random_stateintorRandomStateinstance,default=None

Controlstheshufflingappliedtothedatabeforeapplyingthesplit.Passanintforreproducibleoutputacrossmultiplefunctioncalls.See

Glossary.K最近鄰分類算法fromsklearn.preprocessingimportStandardScalerss=StandardScaler()X_train=ss.fit_transform(X_train)X_test=ss.transform(X_test)#StandardizefeaturesbyremovingthemeanandscalingtounitvarianceK最近鄰分類算法fromsklearn.neighborsimportKNeighborsClassifierknc=KNeighborsClassifier()knc.fit(X_train,y_train)class

sklearn.neighbors.KNeighborsClassifier(n_neighbors=5,

*,

weights='uniform',

algorithm='auto',

leaf_size=30,

p=2,

metric='minkowski',

metric_params=None,

n_jobs=None,

**kwargs)

K最近鄰分類算法y_predict=knc.predict(X_test)print('TheaccuracyofK-NearestNeighborClassifieris',knc.score(X_test,y_test))#TheaccuracyofK-NearestNeighborClassifieris0.8947368421052632fromsklearn.metricsimportclassification_reportprint(classification_report(y_test,y_predict,target_names=iris.target_names))K最近鄰分類算法PrecisionRecallFl-scoreSupportsetosa1.001.001.008versicolor0.731.000.8511virginica1.000.790.8819accuracy0.8938macroavg0.910.930.9138weightedavg0.920.890.9038KNN分類統(tǒng)計(jì)結(jié)果K最近鄰分類算法分類結(jié)果每個(gè)分類標(biāo)簽的精確度,召回率和F1-score。精確度:precision,正確預(yù)測為正的,占全部預(yù)測為正的比例,TP/(TP+FP)召回率:recall,正確預(yù)測為正的,占全部實(shí)際為正的比例,TP/(TP+FN)F1-score:精確率和召回率的調(diào)和平均數(shù),2*precision*recall/(precision+recall)總體的微平均值,宏平均值和加權(quán)平均值。微平均值:microaverage,所有數(shù)據(jù)結(jié)果的平均值宏平均值:macroaverage,所有標(biāo)簽結(jié)果的平均值加權(quán)平均值:weightedaverage,所有標(biāo)簽結(jié)果的加權(quán)平均值在二分類場景中,正標(biāo)簽的召回率稱為敏感度(sensitivity),負(fù)標(biāo)簽的召回率稱為特異性(specificity)。K最近鄰分類算法K最近鄰分類算法小結(jié)Lazylearningalgorithm

?KNNisalazylearningalgorithmbecauseitdoesnothaveaspecializedtrainingphaseandusesallthedatafortrainingwhileclassification.Non-parametriclearningalgorithm

?KNNisalsoanon-parametriclearningalgorithmbecauseitdoesn’tassumeanythingabouttheunderlyingdata.K最近鄰分類算法優(yōu)點(diǎn)簡單易用,相比其他算法,KNN算是比較簡潔明了的算法。即使沒有很高的數(shù)學(xué)基礎(chǔ)也能搞清楚它的原理。模型訓(xùn)練時(shí)間快,上面說到KNN算法是惰性的,這里也就不再過多講述。預(yù)測效果好。對異常值不敏感缺點(diǎn)對內(nèi)存要求較高,因?yàn)樵撍惴ù鎯α怂杏?xùn)練數(shù)據(jù)預(yù)測階段可能很慢對不相關(guān)的功能和數(shù)據(jù)規(guī)模敏感樸素貝葉斯樸素貝葉斯方法是在貝葉斯算法的基礎(chǔ)上進(jìn)行了相應(yīng)的簡化,即假定給定目標(biāo)值時(shí)屬性之間相互條件獨(dú)立。也就是說沒有哪個(gè)屬性變量對于決策結(jié)果來說占有著較大的比重,也沒有哪個(gè)屬性變量對于決策結(jié)果占有著較小的比重。雖然這個(gè)簡化方式在一定程度上降低了貝葉斯分類算法的分類效果,但是在實(shí)際的應(yīng)用場景中,極大地簡化了貝葉斯方法的復(fù)雜性。樸素貝葉斯基本思想樸素貝葉斯分類(NBC)是以貝葉斯定理為基礎(chǔ)并且假設(shè)特征條件之間相互獨(dú)立的方法,先通過已給定的訓(xùn)練集,以特征詞之間獨(dú)立作為前提假設(shè),學(xué)習(xí)從輸入到輸出的聯(lián)合概率分布,再基于學(xué)習(xí)到的模型,輸入求出使得后驗(yàn)概率最大的輸出。樸素貝葉斯算法實(shí)踐fromsklearn.naive_bayesimportGaussianNBimportnumpyasnpimportpandasaspdfrompandasimportSeries,DataFrameimportmatplotlib.pyplotaspltfromsklearn.datasetsimportload_irisfrommatplotlib.colorsimportListedColormap%matplotlibinline#導(dǎo)入函數(shù)muNB=GaussianNB()#讀取數(shù)據(jù)iris=load_iris()#取出數(shù)據(jù)中的datadata=iris.data#取出數(shù)據(jù)中的targettarget=iris.target#取data中所有行前兩列為訓(xùn)練數(shù)據(jù)samples=data[:,:2]#訓(xùn)練數(shù)據(jù)muNB.fit(samples,target)樸素貝葉斯#取出訓(xùn)練數(shù)據(jù)中第一列中的最大與最小值xmin,xmax=samples[:,0].min(),samples[:,0].max()#取出訓(xùn)練數(shù)據(jù)中第二列中的最大與最小值ymin,ymax=samples[:,1].min(),samples[:,1].max()#在最大與最小值的區(qū)間分成300個(gè)數(shù)據(jù)x=np.linspace(xmin,xmax,300)y=np.linspace(ymin,ymax,300)#然后使這些數(shù)據(jù)組成一個(gè)平面xx,yy=np.meshgrid(x,y)#生成90000個(gè)坐標(biāo)點(diǎn)X_test=np.c_[xx.ravel(),yy.ravel()]#預(yù)測訓(xùn)練數(shù)據(jù)y_=muNB.predict(X_test)#導(dǎo)入三種不同的顏色colormap=ListedColormap(['#00aaff','#aa00ff','#ffaa00'])#生成三個(gè)不同顏色的模塊,第一列為x軸坐標(biāo),第二列為y軸坐標(biāo),預(yù)測之后,不同的點(diǎn)分成不同的三類plt.title("NaiveBayesianalgorithm")plt.scatter(X_test[:,0],X_test[:,1],c=y_)樸素貝葉斯執(zhí)行結(jié)果決策樹決策樹(decisiontree)是一種基本的分類與回歸方法。決策樹模型呈樹形結(jié)構(gòu),在分類問題中,表示基于特征對實(shí)例進(jìn)行分類的過程。它可以認(rèn)為是if-then規(guī)則的集合,也可以認(rèn)為是定義在特征空間與類空間上的條件概率分布。其主要優(yōu)點(diǎn)是模型具有可讀性,分類速度快。學(xué)習(xí)時(shí),利用訓(xùn)練數(shù)據(jù),根據(jù)損失函數(shù)最小化的原則建立決策樹模型。預(yù)測時(shí),對新的數(shù)據(jù),利用決策樹模型進(jìn)行分類。決策樹學(xué)習(xí)通常包括3個(gè)步驟:特征選擇、決策樹的生成和決策樹的修剪。決策樹基本思想1)樹以代表訓(xùn)練樣本的單個(gè)結(jié)點(diǎn)開始。2)如果樣本都在同一個(gè)類.則該結(jié)點(diǎn)成為樹葉,并用該類標(biāo)記。3)否則,算法選擇最有分類能力的屬性作為決策樹的當(dāng)前結(jié)點(diǎn).4)根據(jù)當(dāng)前決策結(jié)點(diǎn)屬性取值的不同,將訓(xùn)練樣本分為若干子集,每個(gè)取值形成一個(gè)分枝,有幾個(gè)取值形成幾個(gè)分枝。勻針對上一步得到的一個(gè)子集,重復(fù)進(jìn)行先前步驟,遞歸形成每個(gè)劃分樣本上的決策樹。一旦一個(gè)屬性出現(xiàn)在一個(gè)結(jié)點(diǎn)上,就不必在該結(jié)點(diǎn)的任何后代考慮它。5)遞歸劃分步驟僅當(dāng)下列條件之一成立時(shí)停止:①給定結(jié)點(diǎn)的所有樣本屬于同一類。②沒有剩余屬性可以用來進(jìn)一步劃分樣本.在這種情況下.使用多數(shù)表決,將給定的結(jié)點(diǎn)轉(zhuǎn)換成樹葉,并以樣本中元組個(gè)數(shù)最多的類別作為類別標(biāo)記,同時(shí)也可以存放該結(jié)點(diǎn)樣本的類別分布,③如果某一分枝tc,沒有滿足該分支中已有分類的樣本,則以樣本的多數(shù)類創(chuàng)建一個(gè)樹葉。

決策樹算法實(shí)踐fromsklearn.datasetsimportload_irisfromsklearnimportpreprocessingfromsklearn.model_selectionimporttrain_test_splitfromsklearn.treeimportDecisionTreeClassifierfromsklearn.treeimportexport_graphvizfromsiximportStringIOimportpydotplusfromIPython.displayimportdisplay,Imageiris=load_iris()x=iris.data#數(shù)據(jù)特征y=iris.target#數(shù)據(jù)特征x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2,random_state=1)scaler=preprocessing.StandardScaler().fit(x_train)x1_train=scaler.transform(x_train)x1_test=scaler.transform(x_test)clf=DecisionTreeClassifier(criterion='entropy')clf.fit(x_train,y_train)決策樹y_pre=clf.predict(x1_test)print(clf.score(x1_test,y_test))importosos.environ["PATH"]+=os.pathsep+'C:\ProgramFiles(x86)\Graphviz2.38\bin'dot_data=StringIO()export_graphviz(clf,out_file=dot_data,feature_names=iris.feature_names,class_names=iris.target_names,filled=True,rounded=True,special_characters=True)graph=pydotplus.graph_from_dot_data(dot_data.getvalue())graph.write_png('iris.png')display(Image(graph.create_png()))決策樹隨機(jī)森林---組合方法、集成學(xué)習(xí)實(shí)際中,只使用單一模型決定一組數(shù)據(jù)的分類常常并不現(xiàn)實(shí),一個(gè)對數(shù)據(jù)分類描述比較清晰的模型也許異常復(fù)雜,只使用一種準(zhǔn)則建立的模型很難避免不出現(xiàn)過度擬合。組合模型是一個(gè)思路,它的基本原理是:用現(xiàn)成的方法建立一些精度不高的弱分類器或回歸,將這些效果粗糙的模型組合起來,形成一個(gè)分類系統(tǒng),達(dá)到改善整體模型性能的效果。組合方法是近年來機(jī)器學(xué)習(xí)領(lǐng)域中的研究熱點(diǎn)之一。經(jīng)典的三個(gè)組合方法是AdaBoost、Bagging和隨機(jī)森林。隨機(jī)森林根據(jù)下列算法而建造每棵樹:用N來表示訓(xùn)練用例(樣本)的個(gè)數(shù),M表示特征數(shù)目。輸入特征數(shù)目m,用于確定決策樹上一個(gè)節(jié)點(diǎn)的決策結(jié)果;其中m應(yīng)遠(yuǎn)小于M。從N個(gè)訓(xùn)練用例(樣本)中以有放回抽樣的方式,取樣N次,形成一個(gè)訓(xùn)練集(即bootstrap取樣),并用未抽到的用例(樣本)作預(yù)測,評估其誤差。對于每一個(gè)節(jié)點(diǎn),隨機(jī)選擇m個(gè)特征,決策樹上每個(gè)節(jié)點(diǎn)的決定都是基于這些特征確定的。根據(jù)這m個(gè)特征,計(jì)算其最佳的分裂方式。每棵樹都會完整成長而不會剪枝,這有可能在建完一棵正常樹狀分類器后會被采用)。隨機(jī)森林算法實(shí)踐importnumpyasnpimportmatplotlib.pyplotaspltfrommatplotlib.colorsimportListedColormapfromsklearn.ensembleimportRandomForestClassifierfromsklearn.ensembleimportExtraTreesClassifierfromsklearn.datasetsimportload_irisRF=RandomForestClassifier(n_estimators=100,n_jobs=4,oob_score=True)iris=load_iris()x=iris.data[:,:2]y=iris.targetRF.fit(x,y)h=.02cmap_light=ListedColormap(['#FFAAAA','#AAFFAA','#AAAAFF'])隨機(jī)森林cmap_bold=ListedColormap(['#FF0000','#00FF00','#0000FF'])forweightin['uniform','distance']:x_min,x_max=x[:,0].min()-1,x[:,0].max()+1y_min,y_max=x[:,1].min()-1,x[:,1].max()+1xx,yy=np.meshgrid(np.arange(x_min,x_max,h),np.arange(y_min,y_max,h))z=RF.predict(np.c_[xx.ravel(),yy.r

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論