《機器學(xué)習(xí)-Python實戰(zhàn)(微課版)》課件 夏林中 第9-12章 AdaBoost -神經(jīng)網(wǎng)絡(luò) 綜合案例_第1頁
《機器學(xué)習(xí)-Python實戰(zhàn)(微課版)》課件 夏林中 第9-12章 AdaBoost -神經(jīng)網(wǎng)絡(luò) 綜合案例_第2頁
《機器學(xué)習(xí)-Python實戰(zhàn)(微課版)》課件 夏林中 第9-12章 AdaBoost -神經(jīng)網(wǎng)絡(luò) 綜合案例_第3頁
《機器學(xué)習(xí)-Python實戰(zhàn)(微課版)》課件 夏林中 第9-12章 AdaBoost -神經(jīng)網(wǎng)絡(luò) 綜合案例_第4頁
《機器學(xué)習(xí)-Python實戰(zhàn)(微課版)》課件 夏林中 第9-12章 AdaBoost -神經(jīng)網(wǎng)絡(luò) 綜合案例_第5頁
已閱讀5頁,還剩340頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第九章AdaBoost

學(xué)習(xí)目標通過本章學(xué)習(xí)可以:掌握Boosting算法的思想掌握AdaBoost算法的基本原理掌握AdaBoost的scikit-learn應(yīng)用方法BoostingAdaBoost原理AdaBoost的scikit-learn實現(xiàn)應(yīng)用案例集成學(xué)習(xí)通過將多個單個學(xué)習(xí)器集成/組合在一起,使它們共同完成學(xué)習(xí)任務(wù),以達到提高預(yù)測準確率的目的。Bagging:核心思想是對訓(xùn)練集進行有放回地抽取,從而為每一個基本分類器都構(gòu)造出一個同樣大小但各不相同的的訓(xùn)練集,從而訓(xùn)練出不同的基分類器。代表算法是隨機森林。Boosting:是一種可以用來減小監(jiān)督學(xué)習(xí)中偏差的機器學(xué)習(xí)算法。在分類問題中,它通過改變訓(xùn)練樣本的權(quán)重,學(xué)習(xí)多個分類器,并將這些分類器進行線性組合,提升分類的性能。代表算法有Adaboost和GradientBoostingTree(GBDT)。回顧:集成學(xué)習(xí)Boosting的主要作用跟bagging類似也是一種把若干個基分類器整合為一個分類器的方法。Boosting是一個順序過程,每個后續(xù)模型都會嘗試糾正先前模型的錯誤,后續(xù)的模型依賴于之前的模型。Boosting的基本思想先從初始訓(xùn)練集訓(xùn)練出一個基學(xué)習(xí)器,再根據(jù)基學(xué)習(xí)器的表現(xiàn)對訓(xùn)練樣本分布進行調(diào)整,使得先前基學(xué)習(xí)器做錯的訓(xùn)練樣本在后續(xù)受到更多的關(guān)注,然后基于調(diào)整后的樣本分布來訓(xùn)練下一個基學(xué)習(xí)器;如此重復(fù)進行,直至基學(xué)習(xí)器數(shù)目達到事先指定的值T,最終將這T個基學(xué)習(xí)器進行加權(quán)結(jié)合。Boosting的工作機制樣本權(quán)重分類器權(quán)重優(yōu)化學(xué)習(xí)器修正樣本權(quán)重Boosting是一個迭代的過程,通過改變訓(xùn)練樣本的分布,使得基分類器聚焦在那些很難分的樣本上。不像bagging,Boosting給每一個訓(xùn)練樣本賦予一個權(quán)值,而且可以在每一輪提升過程結(jié)束時自動地調(diào)整權(quán)值。Boosting結(jié)合了很多弱學(xué)習(xí)器來形成一個強學(xué)習(xí)器,單個模型表現(xiàn)不佳,但它們在數(shù)據(jù)集的某些部分表現(xiàn)很好。因此,每個模型實際上提升了集成的整體性能。訓(xùn)練樣本的權(quán)值可以用于以下方面:可以用作抽樣分布,從原始數(shù)據(jù)集中提取出自主樣本集?;鶎W(xué)習(xí)器可以使用權(quán)值學(xué)習(xí)有利于高權(quán)值樣本的模型。Boosting提升的理解偏差-方差Boosting:降低偏差。Bagging:降低方差。樣本選擇:Boosting:每一輪的訓(xùn)練集不變,只是訓(xùn)練集中每個樣本的權(quán)重發(fā)生變化,權(quán)值根據(jù)上一輪的預(yù)測結(jié)果進行調(diào)整。Bagging:訓(xùn)練集是在原始集中有放回抽取的,從原始集中選出的訓(xùn)練集之間是獨立的。樣本權(quán)重:Boosting:根據(jù)錯誤率不斷調(diào)整樣本的權(quán)值,錯誤率越大則權(quán)值越大。Bagging:每個樣本的權(quán)重相等。Bagging與Boosting區(qū)別(1)基學(xué)習(xí)器權(quán)重:Boosting:每個弱學(xué)習(xí)器都有相應(yīng)的權(quán)重,對于誤差小的學(xué)習(xí)器會有更大的權(quán)重。Bagging:弱學(xué)習(xí)器的權(quán)重可以相等也可以賦予權(quán)重。串、并行計算:Boosting:串行,各個及學(xué)習(xí)器順序生成,因為后一個模型參數(shù)依賴于前一輪模型的預(yù)測結(jié)果。Bagging:各個學(xué)習(xí)器可以并行生成。Bagging與Boosting區(qū)別(2)BoostingAdaBoost原理AdaBoost的scikit-learn實現(xiàn)應(yīng)用案例Boosting族算法最著名的代表是AdaBoost[FreundandSchapire,1997]。AdaBoost:AdaptiveBoosting,自適應(yīng)提升。Adaboost采用迭代的思想,繼承了Boosting算法,每次迭代只訓(xùn)練一個弱學(xué)習(xí)器,訓(xùn)練好的弱學(xué)習(xí)器將參與下一次迭代。也就是說,在第N次迭代中,一共有N個弱學(xué)習(xí)器,其中N-1個是以前訓(xùn)練好的,其各種參數(shù)都不會改變,本次訓(xùn)練第N個學(xué)習(xí)器。其中弱學(xué)習(xí)器的關(guān)系是第N個弱學(xué)習(xí)器更可能分對前N-1個弱學(xué)習(xí)器沒分對的數(shù)據(jù),最終分類輸出要看這N個分類器的綜合效果。AdaBoost1.如何改變訓(xùn)練樣本分布?2.采用什么樣的結(jié)合策略來將基學(xué)習(xí)器結(jié)合成一個強學(xué)習(xí)器?針對第一個問題,AdaBoost提高那些被前一輪基學(xué)習(xí)器錯誤分類的樣本的權(quán)值,降低那些被正確分類的樣本的權(quán)值;針對第二個問題,AdaBoost對所有基學(xué)習(xí)器采用加權(quán)結(jié)合,增大分類誤差小的基學(xué)習(xí)器的權(quán)值,減少分類錯誤率大的基學(xué)習(xí)器的權(quán)值。AdaBoost的兩個關(guān)鍵問題

二分類算法原理(1)

二分類算法原理(2)

二分類算法原理(3)

直接將Adaboost算法應(yīng)用于多類分類問題往往不能得到令人滿意的結(jié)果。針對這個問題,ZhuJi等人在2009年提出了SAMME及SAMME.R算法,這也是sklearn中用Adaboost做多類分類問題時采用的算法。兩者的主要區(qū)別是弱學(xué)習(xí)器權(quán)重的度量。SAMME是二分類Adaboost算法的擴展,即用對樣本集分類效果作為弱學(xué)習(xí)器權(quán)重,而SAMME.R使用了對樣本集分類的預(yù)測概率大小來作為弱學(xué)習(xí)器權(quán)重。由于SAMME.R使用了概率度量的連續(xù)值,迭代一般比SAMME快,因此AdaBoostClassifier的默認算法algorithm的值也是SAMME.R。多分類問題

SAMME算法原理

SAMME.R算法原理SAMME.R使用概率估計來更新增加模型,而SAMME只使用分類。SAMME.R算法通常比SAMME更快地收斂,通過更少的提升迭代實現(xiàn)較低的測試誤差。每一次提升迭代后,測試集上各算法的誤差顯示左側(cè)圖,每一棵樹的測試集上的分類誤差顯示在中間,每一棵樹的boost權(quán)重顯示為右側(cè)圖。在SAMME.R算法中,所有樹的權(quán)重都是1,因此沒有顯示。SAMME和SAMME.R對比

回歸算法原理(1)

回歸算法原理(2)

回歸算法原理(3)

回歸算法原理(4)

優(yōu)點:Adaboost是一種有很高精度的分類器可以使用各種方法構(gòu)建弱學(xué)習(xí)器分類器弱學(xué)習(xí)器構(gòu)造比較簡單不用做特征篩選泛化能力好,不用擔(dān)心overfitting(過擬合)缺點:容易受到噪聲干擾訓(xùn)練時間長執(zhí)行效果依賴于弱學(xué)習(xí)器的選擇AdaBoost優(yōu)缺點BoostingAdaBoost原理AdaBoost的scikit-learn實現(xiàn)應(yīng)用案例類庫介紹:AdaBoostClassifier用于分類,AdaBoostRegressor用于回歸。AdaBoostClassifier使用了兩種Adaboost分類算法的實現(xiàn),SAMME和SAMME.R。而AdaBoostRegressor則使用了Adaboost.R2(和前面原理一致)。Adaboost調(diào)參:主要從兩方面進行調(diào)參,一是對Adaboost的框架進行調(diào)參,二是對選擇的弱分類器進行調(diào)參,兩者相輔相成。AdaBoost的scikit-learn實現(xiàn)(1)base_estimator:弱分類學(xué)習(xí)器或者弱回歸學(xué)習(xí)器。AdaBoostClassifier默認使用CART分類樹DecisionTreeClassifier,而AdaBoostRegressor默認使用CART回歸樹DecisionTreeRegressor。(2)algorithm:這個參數(shù)只有AdaBoostClassifier有。scikit-learn實現(xiàn)了兩種Adaboost分類算法,SAMME和SAMME.R。兩者的主要區(qū)別是弱學(xué)習(xí)器權(quán)重的度量。AdaBoostClassifier的默認算法是SAMME.R。(3)loss:這個參數(shù)只有AdaBoostRegressor有,Adaboost.R2算法會用到。有線性‘linear’,平方‘square’和指數(shù)‘exponential’三種選擇,默認是線性??蚣軈?shù)(1)(4)n_estimators:AdaBoostClassifier和AdaBoostRegressor都有,弱學(xué)習(xí)器的最大迭代次數(shù),或者說最大的弱學(xué)習(xí)器的個數(shù)。一般來說n_estimators太小,容易欠擬合,n_estimators太大,又容易過擬合,一般選擇一個適中的數(shù)值。默認是50。(5)learning_rate:AdaBoostClassifier和AdaBoostRegressor都有,即每個弱學(xué)習(xí)器的權(quán)重縮減系數(shù)ν,ν的取值范圍為0<ν≤1,默認是1。對于同樣的訓(xùn)練集擬合效果,較小的ν意味著需要更多的弱學(xué)習(xí)器的迭代次數(shù)。通常我們用步長和迭代最大次數(shù)一起來決定算法的擬合效果??蚣軈?shù)(2)(1)max_features:劃分時考慮的最大特征數(shù)??梢允褂煤芏喾N類型的值,默認是“None”,意味著劃分時考慮所有的特征數(shù)。(2)max_depth:決策樹最大深度。默認可以不輸入,此時,決策樹在建立子樹的時候不會限制子樹的深度。(3)min_samples_split:內(nèi)部節(jié)點劃分所需最小樣本數(shù)。默認是2。這個值限制了子樹繼續(xù)劃分的條件,如果某節(jié)點的樣本數(shù)少于min_samples_split,則不會繼續(xù)再嘗試選擇最優(yōu)特征來進行劃分。弱學(xué)習(xí)器參數(shù)(1)(4)min_samples_leaf:葉子節(jié)點最少樣本數(shù),默認是1。這個值限制了葉子節(jié)點最少的樣本數(shù),如果某葉子節(jié)點數(shù)目小于樣本數(shù),則會和兄弟節(jié)點一起被剪枝。(5)min_weight_fraction_leaf:葉子節(jié)點最小的樣本權(quán)重和,默認是0,即不考慮權(quán)重問題。這個值限制了葉子節(jié)點所有樣本權(quán)重和的最小值,如果小于這個值,則會和兄弟節(jié)點一起被剪枝。(6)max_leaf_nodes:最大葉子節(jié)點數(shù),默認是“None”,即不限制最大的葉子節(jié)點數(shù)。通過限制最大葉子節(jié)點數(shù),可以防止過擬合。弱學(xué)習(xí)器參數(shù)(2)BoostingAdaBoost原理AdaBoost的scikit-learn實現(xiàn)應(yīng)用案例本小節(jié)基于Boston波士頓房價數(shù)據(jù)集利用AdaBoost對房價進行預(yù)測。Boston房價預(yù)測是一個回歸問題。數(shù)據(jù)集一共包含506個觀察,13個輸入變量和1個輸出變量。每條數(shù)據(jù)包含房屋以及房屋周圍的詳細信息。其中包含城鎮(zhèn)犯罪率,一氧化氮濃度,住宅平均房間數(shù),到中心區(qū)域的加權(quán)距離以及自住房平均房價等等。應(yīng)用案例導(dǎo)入庫準備數(shù)據(jù)集數(shù)據(jù)準備fromsklearn.datasetsimportload_bostonfromsklearn.ensembleimportAdaBoostRegressor#下載數(shù)據(jù)集boston=load_boston()#定義feature和labelx=boston.datay=boston.targetprint('Featurecolumnname')print(boston.feature_names)print("Sampledatavolume:%d,numberoffeatures:%d"%x.shape)print("Targetsampledatavolume:%d"%y.shape[0])sns.distplot(tuple(y),kde=False,fit=st.norm)定義模型AdaBoost和DecisionTree,在未調(diào)參的情況下對比兩者的性能。模型定義和訓(xùn)練#定義模型名稱names=['DecisionTree','AdaBoost']#定義模型models=[DecisionTreeRegressor(),AdaBoostRegressor(n_estimators=30)]#模型訓(xùn)練并返回R2值defR2(model,x_train,x_test,y_train,y_test):model_fitted=model.fit(x_train,y_train)y_pred=model_fitted.predict(x_test)score=r2_score(y_test,y_pred)returnscore#輸出模型測試結(jié)果forname,modelinzip(names,models):score=R2(model,x_train,x_test,y_train,y_test)print("{}:{:.6f}".format(name,score.mean()))返回結(jié)果:DecisionTree:0.461254AdaBoost:0.657742通過網(wǎng)格搜索的方法選擇較好的框架參數(shù)。網(wǎng)格搜索#網(wǎng)格搜索選擇較好的框架參數(shù)parameters={'n_estimators':[50,60,70,80],'learning_rate':[0.5,0.6,0.7,0.8,0.9],}model=GridSearchCV(AdaBoostRegressor(),param_grid=parameters,cv=3)model.fit(x_train,y_train)#輸出最合適的參數(shù)值print("Optimalparameterlist:",model.best_params_)print("Optimalmodel:",model.best_estimator_)print("OptimalR2value:",model.best_score_)返回結(jié)果:Optimalparameterlist:{'learning_rate':0.6,'n_estimators':80}Optimalmodel:AdaBoostRegressor(learning_rate=0.6,n_estimators=80)OptimalR2value:0.8356690414326865對通過網(wǎng)格搜索進行調(diào)參后的模型的擬合效果進行可視化。擬合效果可視化##可視化模型擬合結(jié)果ln_x_test=range(len(x_test))y_predict=model.predict(x_test)plt.figure(figsize=(16,8),facecolor='w')plt.plot(ln_x_test,y_test,'r-',lw=2,label=u'Value')plt.plot(ln_x_test,y_predict,'g-',lw=3,label=u'EstimatedvalueoftheAdaboostalgorithm,$R^2$=%.3f'%(model.best_score_))plt.legend(loc='upperleft')plt.grid(True)plt.title(u"BostonHousingPriceForecast(Adaboost)")plt.xlim(0,101)plt.show()通過本章的學(xué)習(xí)了解Adaboost算法的基本原理和應(yīng)用方式,為后續(xù)的實際應(yīng)用提供理論和技術(shù)準備??偨Y(jié)謝謝第十章聚類學(xué)習(xí)目標通過本章學(xué)習(xí)可以:掌握K-Means聚類過程和原理。掌握層次聚類的過程和原理。掌握密度聚類的過程和原理。掌握譜聚類的過程和原理。1.無監(jiān)督學(xué)習(xí)2.聚類算法3.

K-Means聚類4.

層次聚類5.密度聚類算法引入我們通常講,物以類聚,人以群分!其實說的就是要依據(jù)物和人的關(guān)系進行區(qū)分。而關(guān)系在實際應(yīng)用場景下,又分為內(nèi)部相似性和外部關(guān)系。前者是觀察的對象或物體本身比較相似,劃分為一類,比如橘子和柚子都屬于水果;后者是指兩種物體經(jīng)常同時出現(xiàn),比如牛奶和面包等。而這些就是我們接下來要學(xué)習(xí)的無監(jiān)督學(xué)習(xí)。無監(jiān)督學(xué)習(xí)概念無監(jiān)督學(xué)習(xí):是指在標注的數(shù)據(jù)中,根據(jù)數(shù)據(jù)之間本身的屬性特征和關(guān)聯(lián)性對數(shù)據(jù)進行區(qū)分,相似相近或關(guān)聯(lián)性強的數(shù)據(jù)放在一起,而不相似不相近、關(guān)聯(lián)性不強的數(shù)據(jù)不放在一起。無監(jiān)督學(xué)習(xí)的本質(zhì)是:利用無標簽的數(shù)據(jù)學(xué)習(xí)數(shù)據(jù)的分布或數(shù)據(jù)與數(shù)據(jù)之間的關(guān)系。無監(jiān)督學(xué)習(xí)最常應(yīng)用的場景是部分降維算法、聚類算法和關(guān)聯(lián)算法。無監(jiān)督學(xué)習(xí)導(dǎo)入有監(jiān)督學(xué)習(xí)與無監(jiān)督學(xué)習(xí)的區(qū)別有監(jiān)督學(xué)習(xí)中,如分類問題,要求樣本必須有明確的類別信息,其建立的前提是所有待分類項都有一個類別與之對應(yīng)。但在處理實際問題的過程中,獲取到的數(shù)據(jù)記錄可能并沒有進行標注,尤其是處理海量數(shù)據(jù)時,如果通過預(yù)處理對數(shù)據(jù)進行打標,以滿足分類算法的要求,代價非常大。有監(jiān)督學(xué)習(xí)中最常見的是分類問題,而無監(jiān)督學(xué)習(xí)中最常見的是聚類問題,聚類問題不依賴預(yù)定義的類和類標號的訓(xùn)練實例。關(guān)注事物本身的特征分析。比如電商對用戶信息和購買行為數(shù)據(jù)進行聚類分析,目的是找到大量級的且有一定相似度的客戶群,從而實現(xiàn)用戶畫像,接著針對該用戶群共有的行為特征投放廣告和其他營銷活動。1.無監(jiān)督學(xué)習(xí)2.聚類算法3.

K-Means聚類4.

層次聚類5.密度聚類算法聚類分析概念聚類分析是分析研究對象如何按照多個方面的特征進行綜合分類的一種多元統(tǒng)計方法,它是根據(jù)物以類聚的思想將相似的樣本歸為一類。把對象分為不同的類別,類別是依據(jù)數(shù)據(jù)的特征確定的。把相似的東西放在一起,類別內(nèi)部的差異盡可能小,類別之間的差異盡可能的大。作用作為單獨過程,用于對數(shù)據(jù)進行打標,即數(shù)據(jù)畫像。作為分類等其他學(xué)習(xí)任務(wù)的前驅(qū)過程,如聚類算法可以作為一些監(jiān)督算法的前驅(qū)過程。聚類分析的作用如下兩圖,有什么相同與不同之處?聚類分析兩個基本問題-性能度量性能度量:評價聚類結(jié)果的好壞程度。聚類性能度量一般分兩類:外部指標:將聚類結(jié)果與某個“參考模型”進行比較,如依據(jù)業(yè)務(wù)專家給出的劃分結(jié)果的聚類結(jié)果進行評價。內(nèi)部指標:直接考察聚類結(jié)果不利用任何參考模型。聚類分析兩個基本問題-距離計算常用的距離度量方法包括:歐幾里得距離(簡稱歐氏距離)和余弦相似度,兩者都是評定個體間差異的大小的。歐氏距離會受指標不同單位刻度影響,需要先對數(shù)據(jù)進行標準化,在聚類問題中,如果兩個樣本點的歐氏距離越大,表示兩者差異越大。如下表示兩個??維的樣本點

,

之間的歐氏距離

:余弦相似度不會受指標刻度的影響,余弦值落于區(qū)間[-1,1],值越大,差異越小。如

表示樣本點

的余弦相似度,此時將樣本點看作??維向量處理。聚類算法應(yīng)用場景-行業(yè)(1)離群點檢測離群點檢測是數(shù)據(jù)挖掘中重要應(yīng)用,任務(wù)就是發(fā)現(xiàn)與大部分觀察對象顯著不同的對象,很多的數(shù)據(jù)挖掘方法會將這種差異信息視作噪聲進行預(yù)處理,但也有的一些應(yīng)用場景中,離群點本身攜帶有重要的異常信息,是需要被關(guān)注和研究的。離群點檢測已經(jīng)被廣泛應(yīng)用于電信、信用卡詐騙檢測,貸款審批,電子商務(wù),網(wǎng)絡(luò)入侵和天氣預(yù)報等領(lǐng)域,甚至可以利用離群點檢測分析運動員的統(tǒng)計數(shù)據(jù),以發(fā)現(xiàn)異常運動員。應(yīng)用方式:利用聚類算法,找到遠離其他簇的小簇;首先聚類所有對象,然后評估對象屬于簇的程度,對不同距離的點進行打分。聚類算法應(yīng)用場景-行業(yè)(2)用戶畫像構(gòu)建方面:根據(jù)客戶數(shù)據(jù),將相似性較高的客戶聚為一類,打標簽,進行客戶類別細分。業(yè)務(wù)推薦和精準營銷方面:通過構(gòu)建用戶畫像進行業(yè)務(wù)推薦和精準營銷。常用聚類算法介紹基于原型聚類(partitioningmethods)K-Means算法,K-Mediods算法基于層次聚類(hierarchicalmethods)HierarchicalClustering算法、BIRCH算法基于密度聚類(density-basedmethods)DBSCAN算法1.無監(jiān)督學(xué)習(xí)2.聚類算法3.K-Means聚類4.

層次聚類5.密度聚類算法基于原型聚類“原型”是指樣本空間中具有代表性的點。原型聚類假設(shè)聚類結(jié)構(gòu)可以通過一組原型刻畫,這一方法在實際聚類任務(wù)中最為常用,理解起來也較簡單;通常算法先對原型進行初始化,然后對原型進行迭代更新求解。采用不同的原型表示,不同的求解方式,即會產(chǎn)生不同的聚類算法。最經(jīng)典的原型聚類算法即:K-Means聚類算法:基于各個樣本點與各個聚集簇的中心點距離遠近,進行劃分的聚類算法。K-Mediods算法:在K-Means基礎(chǔ)上改進的算法。K-Means聚類算法算法思想輸入聚類個數(shù)??,以及包含??個數(shù)據(jù)對象的數(shù)據(jù)集,輸出標準的k個聚類的一種算法。然后將??個數(shù)據(jù)對象劃分為??個聚類,而最終所獲得的聚類滿足:(1)同一聚類中的對象相似度較高;(2)而不同聚類中的對象相似度較小。K-Means聚類算法步驟執(zhí)行步驟1)選取??個對象作為初始中心(叫質(zhì)心),作為聚類中心;2)對每個樣本數(shù)據(jù),計算它們與中心的歐氏距離,按距離最近的準則將它們分到距離最近的聚類中心所對應(yīng)的類;3)更新聚類中心:將每個類別中所有對象所對應(yīng)的均值作為該類別的新中心(新的質(zhì)心),計算目標函數(shù);4)判斷聚類中心和目標函數(shù)的值是否改變,若不變,則輸出結(jié)果,若改變,則返回2)。??1=(2,10),??2=(2,5),??3=(8,4),??4=(5,8),??5=(7,5),??6=(6,4),??7=(1,2),??8=(4,9).K-Means聚類-過程舉例(1)K-Means聚類-過程舉例(2)K-Means聚類-K如何確定K-Means算法首先選擇??個初始質(zhì)心,其中??是用戶指定的參數(shù),即所期望的簇的個數(shù)。這樣做的前提是已經(jīng)知道數(shù)據(jù)集中包含多少個簇,但很多情況下,我們并不知道數(shù)據(jù)的分布情況。如何有效地確定??值,提供以下幾種方法:從實際問題出發(fā),人工指定比較合理的??值,通過多次隨機初始化聚類中心選取比較滿意的結(jié)果均方根:假設(shè)我們有??個樣本,該方法認為??=枚舉法:用不同的??值進行聚類分別計算類內(nèi)距離均值和類間距離均值之比,選擇最小的那個??值對不同??值都產(chǎn)生2次聚類,選擇兩次聚類結(jié)果最相似的??值手肘法(Elbow)、層次聚類法等。K-Means聚類的優(yōu)缺點優(yōu)點簡單、易于理解、運算速度快;對處理大數(shù)據(jù)集,該算法保持可伸縮性和高效性;當簇接近高斯分布時,它的效果較好。缺點在K-Means算法是局部最優(yōu)的,容易受到初始質(zhì)心的影響;在K-Means算法中K值需要事先給定的,有時候K值的選定非常難以估計;在簇的平均值可被定義的情況下才能使用,只能應(yīng)用連續(xù)型數(shù)據(jù);該算法需要不斷地進行樣本分類調(diào)整,不斷地計算調(diào)整后的新的聚類中心,因此當數(shù)據(jù)量非常大時,算法的性能(時間和計算資源)開銷是非常大的;對噪聲和孤立點數(shù)據(jù)敏感。K-Means聚類-細節(jié)解析初始簇心的選擇有時候會影響最終的聚類結(jié)果,實際操作中,我們一般會選用不同的數(shù)據(jù)作為初始簇心,多次執(zhí)行K-Means算法;新質(zhì)心不一定是實際的一個數(shù)據(jù)點。K-Means算法超參數(shù)????是用戶指定的參數(shù),即所期望的簇的個數(shù)。??指定的前提是已知數(shù)據(jù)集中包含多少個簇,但很多情況下,并不知道數(shù)據(jù)的分布情況,需要憑借業(yè)務(wù)專家的經(jīng)驗;常見做法是多嘗試幾個??值,看分成幾類的結(jié)果更好解釋,更符合分析目的等;或者可以把各種??值算出的SSE做比較,取最小的SSE的??值。K-Means算法會不會陷入一直選質(zhì)心的過程,永遠停不下來?不會。數(shù)學(xué)證明一定會收斂,目標函數(shù)SSE是可收斂的函數(shù),但數(shù)據(jù)量大時,收斂時間可能較長。K-Means算法的使用方法(1)利用python調(diào)用庫sklearn中的cluster子模塊,該模板包含常用聚類算法模型,如:K-Means,DBSCAN等;sklearn的K-Means方法默認用歐氏距離,雖然還有余弦相似度、曼哈頓距離等多種方法,但沒有設(shè)定計算距離方法的參數(shù)。K-Means算法的使用方法(2)利用Python中庫sklearn中的sklearn.cluster.KMeans方法KMeans(n_clusters=8,init=’k_means++’,n_init=10,max_iter=300,tol=0.0001,precompute_distances=’auto’,verbose=0,random_state=None,copy_x=True,n_jobs=1,algorithm=’auto’)參數(shù)說明n_clusters:用于指定聚類中心的個數(shù),一般調(diào)用時只需給出n_clusters的值,如指定??為10,KMeans(n_clusters=10)。init:初始聚類中心的初始化方法,其默認選擇的是K-Means++。max_iter:最大的迭代次數(shù),默認300。K-Means算法優(yōu)化K-Means算法的結(jié)果非常依賴于初始隨機選擇的聚類中心的位置,可以通過多次執(zhí)行該算法來減少初始中心敏感的影響??刹捎玫膬?yōu)化方法有:1.選擇彼此距離盡可能遠的K個點作為初始簇中心。

2.先使用canopy算法進行初始聚類,得到K個canopy中心,以此或距離每個canopy中心最近的點作為初始簇中心。K-Means應(yīng)用示例隨機創(chuàng)建一些二維數(shù)據(jù)作為訓(xùn)練集,選擇二維特征數(shù)據(jù),代碼如下:importnumpyasnpimportmatplotlib.pyplotasplt%matplotlibinlinefromsklearn.datasets.samples_generatorimportK-Means應(yīng)用示例#X為樣本特征,Y為樣本簇類別,共1000個樣本,每個樣本2個特征,共4個簇,簇中心在[-1,-1],[0,0],[1,1],[2,2],簇方差分別為[0.4,0.2,0.2]X,y=make_blobs(n_samples=1000,n_features=2,centers=[[-1,-1],[0,0],[1,1],[2,2]],cluster_std=[0.4,0.2,0.2,0.2],random_state=9)plt.scatter(X[:,0],X[:,1],marker='o')plt.show()K-Means應(yīng)用示例

創(chuàng)建的數(shù)據(jù)如下:K-Means應(yīng)用示例

現(xiàn)在用K-Means聚類方法來做聚類,首先選擇k=2,代碼如下:fromsklearn.clusterimportKMeansy_pred=KMeans(n_clusters=2,random_state=9).fit_predict(X)plt.scatter(X[:,0],X[:,1],c=y_pred)plt.show()K-Means應(yīng)用示例

效果圖輸出如圖:K-Means應(yīng)用示例

用Calinski-HarabaszIndex評估的聚類分數(shù):fromsklearnimportmetricsmetrics.calinski_harabaz_score(X,y_pred)輸出如下:3116.1706763322227K-Means應(yīng)用示例

k=3的聚類效果,代碼如下:fromsklearn.clusterimportKMeansy_pred=KMeans(n_clusters=3,random_state=9).fit_predict(X)plt.scatter(X[:,0],X[:,1],c=y_pred)plt.show()K-Means應(yīng)用示例

效果圖輸出如圖:K-Means應(yīng)用示例

用Calinski-HarabazIndex評估的k=3時候聚類分數(shù):

metrics.calinski_harabaz_score(X,y_pred)輸出如下:

2931.625030199556可見此時k=3的聚類分數(shù)比k=2還差K-Means應(yīng)用示例

k=4時候的聚類效果:fromsklearn.clusterimportKMeansy_pred=KMeans(n_clusters=4,random_state=9).fit_predict(X)plt.scatter(X[:,0],X[:,1],c=y_pred)plt.show()K-Means應(yīng)用示例

效果圖輸出如圖:K-Means應(yīng)用示例

用Calinski-HarabaszIndex評估的k=4時候聚類分數(shù):

metrics.calinski_harabaz_score(X,y_pred)輸出如下:

5924.050613480169

可見k=4的聚類分數(shù)比k=2和k=3都要高,這也符合預(yù)期,隨機數(shù)據(jù)集也就是4個簇K-Means應(yīng)用示例

用MiniBatchKMeans的效果,將batchsize設(shè)置為200.由于的4個簇都是凸的,所以其實batchsize的值只要不是非常的小,對聚類的效果影響不大。forindex,kinenumerate((2,3,4,5)):plt.subplot(2,2,index+1)y_pred=MiniBatchKMeans(n_clusters=k,batch_size=200,random_state=9).fit_predict(X)K-Means應(yīng)用示例

score=metrics.calinski_harabaz_score(X,y_pred)plt.scatter(X[:,0],X[:,1],c=y_pred)plt.text(.99,.01,('k=%d,score:%.2f'%(k,score)),transform=plt.gca().transAxes,size=10,horizontalalignment='right')plt.show()K-Means應(yīng)用示例

效果圖輸出如圖:K-Means應(yīng)用示例

可見:使用MiniBatchKMeans的聚類效果也不錯。當然由于使用MiniBatch的原因,同樣是k=4最優(yōu),KMeans類的Calinski-HarabaszIndex分數(shù)為5924.05,而MiniBatchKMeans的分數(shù)稍微低一些,為5921.45,這個差異損耗并不大。1.無監(jiān)督學(xué)習(xí)2.聚類算法3.

K-Means聚類4.

層次聚類5.密度聚類算法層次聚類層次聚類法核心思想是在不同層次對數(shù)據(jù)集進行劃分,從而形成樹形的聚類結(jié)構(gòu),數(shù)據(jù)集的劃分可采用“自下向上”的聚合策略,也可以采用“自頂向下”的分拆策略。聚類的層次被表示成樹形圖。樹根擁有所有樣本的唯一聚類,葉子是僅有一個樣本的聚類。凝聚層次聚類

AGNES算法(AGglomerativeNESting)采用自底向上的策略。最初將每個對象作為一個簇,然后這些簇根據(jù)某些準則被一步一步合并,兩個簇間的距離可以由這兩個不同簇中距離最近的數(shù)據(jù)點的相似度來確定。聚類的合并過程反復(fù)進行直到所有的對象滿足簇數(shù)目。分裂的層次聚類

DIANA算法(DIvisiveANALysis)采用自頂向下的策略。首先將所有對象置于一個簇中,然后按照某種既定的規(guī)則逐漸細分為越來越小的簇(比如最大的歐式距離),直到達到某個終結(jié)條件(簇數(shù)目或者簇距離達到閾值)。凝聚層次聚類的過程和原理(1)1)計算數(shù)據(jù)集的相似矩陣;2)假設(shè)每個樣本點為一個簇類;3)循環(huán):合并相似度最高的兩個簇類,然后更新相似矩陣;4)當簇類個數(shù)為1時,循環(huán)終止。凝聚層次聚類的過程和原理(2)假設(shè)我們有6個樣本點{A,B,C,D,E,F}第一步:我們假設(shè)每個樣本點都為一個簇類,計算每個簇類間的相似度,得到相似矩陣;第二步:若B和C的相似度最高,合并簇類B和C為一個簇類?,F(xiàn)在我們還有五個簇類,分別為A,BC,D,E,F(xiàn)。第三步:更新簇類間的相似矩陣,相似矩陣的大小為5行5列;若簇類BC和D的相似度最高,合并簇類BC和D為一個簇類?,F(xiàn)在我們還有四個簇類,分別為A,BCD,E,F(xiàn)。凝聚層次聚類的過程和原理(3)第四步:更新簇類間的相似矩陣,相似矩陣的大小為4行4列;若簇類E和F的相似度最高,合并簇類E和F為一個簇類?,F(xiàn)在我們還有3個簇類,分別為A,BCD,EF。第五步:重復(fù)第四步,簇類BCD和簇類EF的相似度最高,合并該兩個簇類;現(xiàn)在我們還有2個簇類,分別為A,BCDEF。第六步:最后合并簇類A和BCDEF為一個簇類,層次聚類算法結(jié)束。凝聚層次聚類的過程和原理(4)樹狀圖是類似樹(tree-like)的圖表,記錄了簇類聚合和拆分的順序。我們根據(jù)上面的步驟,使用樹狀圖對聚合層次聚類算法進行可視化,以上過程如圖所示。層次聚類由不同層次的分割聚類組成,層次之間的分割具有嵌套的關(guān)系。它不需要輸入?yún)?shù),這是它的一個明顯的優(yōu)點,其缺點是終止條件必須具體指定。與原型聚類和密度聚類不同,層次聚類試圖在不同的“層次”上對樣本數(shù)據(jù)集進行劃分,一層一層地進行聚類。典型的分層聚具體有:HierarchicalClustering算法、BIRCH算法等?;趯哟尉垲惓S盟惴ɑ靖拍睿号袛鄡蓚€簇之間的距離(1)基本概念:判斷兩個簇之間的距離(2)計算兩個組合數(shù)據(jù)點間距離常用的方法是:SingleLinkage,CompleteLinkage和AverageLinkage,3種計算方法解析如下:SingleLinkage是將兩個簇中最近的兩個點間的距離作為這兩個組合數(shù)據(jù)點的距離,該方法易受極端值的影響,兩個不相似的點可能由于其中的某個極端的點距離較近而組合在一起。CompleteLinkage與SingleLinkage相反,將兩個簇中距離最遠的兩個點間的距離作為這兩個簇的距離,CompleteLinkage的問題也與SingleLinkage相反,兩個相似的點可能某個點原先所在的簇中有極端值而無法組合在一起。AverageLinkage的計算方法是計算兩個簇中的每個點與其他所有點的距離并將所有距離的均值作為兩個組合數(shù)據(jù)點間的距離,此方法計算量比較大,但結(jié)果比前兩種方法更合理?;靖拍睿号袛鄡蓚€簇之間的距離(3)HierarchicalClustering算法簡單易理解。主要思路:確保距離近的點落在同一個簇(cluster)之中,流程如下:將每個對象作為一個簇????={??},形成簇的集合??={??};

迭代以下步驟直至所有對象都在一個族中;找到一對距離最近的簇:min??(????,????);將這對簇合并為一個新的簇;從原集合C中移除這對簇;最終產(chǎn)生層次樹形的聚類結(jié)構(gòu):樹形圖。HierarchicalClustering算法原理優(yōu)點:可排除噪聲點的干擾,但有可能噪聲點分為一簇。適合形狀不規(guī)則,不要求聚類完全的情況。不必確定??值,可根據(jù)聚類程度不同有不同的結(jié)果。原理簡單,易于理解。缺點:計算量很大,耗費的存儲空間相對于其他幾種方法要高。合并操作不能撤銷。合并操作必須有一個合并限制比例,否則可能發(fā)生過度合并導(dǎo)致所有分類中心聚集,造成聚類失敗。HierarchicalClustering算法優(yōu)缺點skearn提供的模塊cluster中可以調(diào)用:AgglomerativeClustering(n_clusters=2,affinity=“euclidean”,memory,connectivity,compute_full_tree,linkage,pooling_func)具體參數(shù)描述:n_clusters:一個整數(shù),指定分類簇的數(shù)量,默認為2。affinity:一個字符串或者可調(diào)用對象,用于計算距離,默認歐氏距離“euclidean”。memory:用于緩存輸出的結(jié)果,默認為不緩存。connectivity:一個數(shù)組或者可調(diào)用對象或者None,用于指定連接矩陣。compute_full_tree:通常當訓(xùn)練了n_clusters后,訓(xùn)練過程就會停止,等于True時會繼續(xù)訓(xùn)練從而生成一顆完整的樹。HierarchicalClustering使用方法(1)具體參數(shù)描述:linkage:一個字符串,用于指定鏈接算法,可選類型為{“ward”,“complete”,“average”,“single”}?!皊ingle”,單鏈接single-linkage,采用dmin?!癱omplete”,全鏈接complete-linkage,采用dmax?!癮verage”,均連接average-linkage,采用davg。“ward,Ward鏈接,為默認選擇方式。pooling_func:一個可調(diào)用對象,它的輸入是一組特征的值,輸出是一個數(shù)。該參數(shù)在sklearn0.20版本中棄用,將在0.22中刪除。HierarchicalClustering使用方法(2)BIRCH算法即平衡迭代削減聚類法,其核心是用一個聚類特征3元組表示一個簇的有關(guān)信息,從而使一簇點的表示可用對應(yīng)的聚類特征,而不必用具體的一組點來表示。它通過構(gòu)造滿足分支因子和簇直徑限制的聚類特征樹來求聚類。3元組包含:數(shù)據(jù)點個數(shù),數(shù)據(jù)點特征之和,數(shù)據(jù)點特征的平方和分支因子:規(guī)定了樹的每個節(jié)點的樣本個數(shù)簇直徑:體現(xiàn)一類點的距離范圍BIRCH算法通過聚類特征可以方便地進行中心、半徑、直徑及類內(nèi)、類間距離的運算。BIRCH算法中聚類特征樹的構(gòu)建過程是動態(tài)的,可以隨時根據(jù)新的數(shù)據(jù)點對樹進行重構(gòu),適合大規(guī)模數(shù)據(jù)集。BIRCH算法BIRCH算法第一步是通過掃描數(shù)據(jù),建立聚類特征樹。第二步是采用某個算法對聚類特征樹的葉節(jié)點進行聚類。BIRCH算法優(yōu)缺點優(yōu)點就是一次掃描就行進行比較好的聚類。缺點是要求是球形聚類,因為CF樹存儲的都是半徑類的數(shù)據(jù),都是球形才適合。BIRCH算法描述聚類特征樹可以動態(tài)構(gòu)造,不要求所有數(shù)據(jù)讀入內(nèi)存,可逐個讀入。新的數(shù)據(jù)項總是插入到樹中與該數(shù)據(jù)距離最近的葉子中。如果插入后使得該葉子的直徑大于類直徑T,則把該葉子節(jié)點分裂。其它葉子結(jié)點也需要檢查是否超過分枝因子來判斷其分裂與否,直至該數(shù)據(jù)插入到葉子中,并且滿足不超過類直徑,而每個非葉子節(jié)點的子女個數(shù)不大于分枝因子。算法可通過改變類直徑修改特征樹大小,控制其占內(nèi)存容量。BIRCH算法通過一次掃描就可以進行較好的聚類,因此該算法適于大數(shù)據(jù)集。I/O花費與數(shù)據(jù)量成線性關(guān)系。BIRCH算法只適用于數(shù)據(jù)的分布呈凸形及球形的情況,并且由于BIRCH算法需提供正確的聚類個數(shù)和簇直徑限制,對不可視的高維數(shù)據(jù)不可行。BIRCH算法的計算解析sklearn中的聚類算法包含在sklearn.cluster模塊中,BIRCH算法的具體描述為Birch(threshold=0.5,branching_factor=50,n_clusters=3,compute_labels=True,copy=True)參數(shù)說明如下:threshold:float,表示設(shè)定的半徑閾值,默認0.5。branching_factor:int,默認=50,每個節(jié)點最大特征樹子集群數(shù)。n_clusters:int,默認=3,最終聚類數(shù)目。compute_labels:bool,默認為True,是否為每個擬合計算標簽,一般默認。copy:bool,默認為True,是否復(fù)制給定數(shù)據(jù)。如果設(shè)置為False,則將覆蓋初始數(shù)據(jù)。BIRCH算法使用方法層次聚類的應(yīng)用示例

構(gòu)建容量為15000的瑞士卷(swissrolldataset)數(shù)據(jù)集,用離差平方和的層次聚類算法建模,可視化聚類結(jié)果并輸出算法運行時間,代碼如下:n_samples=15000noise=0.05X,_=make_swiss_roll(n_samples,noise)層次聚類的應(yīng)用示例

減小瑞士卷的厚度X[:,1]*=.5print("Computeunstructuredhierarchicalclustering...")st=time.time()ward=AgglomerativeClustering(n_clusters=6,linkage='ward').fit(X)elapsed_time=time.time()-stlabel=ward.labels_#運行時間print("Elapsedtime:%.2fs"%elapsed_time)print("Numberofpoints:%i"%label.size)############################################################層次聚類的應(yīng)用示例

#可視化結(jié)果fig=plt.figure()ax=p3.Axes3D(fig)ax.view_init(7,-80)forlinnp.unique(label):ax.scatter(X[label==l,0],X[label==l,1],X[label==l,2],color=plt.cm.jet(np.float(l)/np.max(label+1)),s=20,edgecolor='k')plt.title('Withoutconnectivityconstraints(time%.2fs)'%層次聚類的應(yīng)用示例

效果圖輸出如圖:1.無監(jiān)督學(xué)習(xí)2.聚類算法3.

K-Means聚類4.

層次聚類5.密度聚類算法密度聚類算法密度聚類的思想不同于K-Means,它是通過聚類的簇是否緊密相連來判斷樣本點是否屬于一個簇,代表性的算法就是DBSCAN,它基于一組鄰域參數(shù)來判斷某處樣本是否是緊密。DBSCAN(Density-BasedSpatialClusteringofApplicationswithNoise,具有噪聲的基于密度的聚類方法)是一種很典型的密度聚類算法,和K-Means,BIRCH這些一般只適用于凸樣本集的聚類相比,DBSCAN還適用于非凸樣本集。密度聚類過程和原理(1)DBSCAN是一種基于密度的聚類算法,這類密度聚類算法一般假定類別可以通過樣本分布的緊密程度決定。同一類別的樣本,他們之間的緊密相連的,也就是說,在該類別任意樣本周圍不遠處一定有同類別的樣本存在。通過將緊密相連的樣本劃為一類,這樣就得到了一個聚類類別。通過將所有各組緊密相連的樣本劃為各個不同的類別,則我們就得到了最終的所有聚類類別結(jié)果。密度聚類過程和原理(2)DBSCAN是基于一組鄰域來描述樣本集的緊密程度的,參數(shù)(?,MinPts)用來描述鄰域的樣本分布緊密程度。其中,?描述了某一樣本的鄰域距離閾值,MinPts描述了某一樣本的距離為?的鄰域中樣本個數(shù)的閾值。DBSCAN算法的基本概念(1)DBSCAN算法的基本概念(2)DBSCAN算法將數(shù)據(jù)點分為三類:核心點:在半徑??內(nèi)含有超過min_??????????????數(shù)目的點。邊界點:在半徑??內(nèi)點的數(shù)量小于min_??????????????,但是落在核心點的鄰域內(nèi)的點。噪音點:既不是核心點也不是邊界點的點。DBSCAN聚類算法應(yīng)用特點和傳統(tǒng)的K-Means算法相比,DBSCAN最大的不同就是不需要輸入類別數(shù)K,當然它最大的優(yōu)勢是可以發(fā)現(xiàn)任意形狀的聚類簇,而不是像K-Means,一般僅僅使用于凸的樣本集聚類。同時它在聚類的同時還可以找出異常點,這點和BIRCH算法類似。DBSCAN聚類算法優(yōu)缺點

優(yōu)點:可以解決數(shù)據(jù)分布特殊(非凸,互相包絡(luò),長條形等)的情況。對于噪聲不敏感,速度較快,不需要指定簇的個數(shù);可適用于較大的數(shù)據(jù)集。在鄰域參數(shù)給定的情況下結(jié)果是確定的,只要數(shù)據(jù)進入算法的順序不變,與初始值無關(guān)。缺點:如果樣本集的密度不均勻、聚類間距差相差很大時,聚類質(zhì)量較差,這時用DBSCAN聚類一般不適合。如果樣本集較大時,聚類收斂時間較長,此時可以對搜索最近鄰時建立的KD樹或者球樹進行規(guī)模限制來改進。調(diào)參相對于傳統(tǒng)的K-Means之類的聚類算法稍復(fù)雜,主要需要對距離閾值?,鄰域樣本數(shù)閾值MinPts聯(lián)合調(diào)參,不同的參數(shù)組合對最后的聚類效果有較大影響。DBSCAN聚類算法使用方法

利用sklearn庫中的sklearn.cluster.DBSCAN方法,完整描述為:sklearn.cluster.DBSCAN(eps=0.5,min_samples=5,metric=’euclidean’,metric_params=None,algorithm=’auto’,leaf_size=30,p=None,n_jobs=None)注意:DBSCAN主要參數(shù):eps:兩個樣本被看作鄰居節(jié)點的最大距離。min_samples:最小簇的樣本數(shù)。metric:距離計算方式,euclidean為歐氏距離計算。密度聚類應(yīng)用示例

importwarningswarnings.filterwarnings('ignore')importnumpyasnpimportmatplotlib.pyplotasplt%matplotlibinlinefromsklearnimportdatasetsfromsklearn.clusterimportDBSCAN,KMeans密度聚類應(yīng)用示例

#noise控制疊加的噪聲的大小X,y=datasets.make_circles(n_samples=1000,noise=0.1,factor=0.3)#centers=[[1.5,1.5]]坐標位置,在1.5,1.5生成X3,y3=datasets.make_blobs(n_samples=500,n_features=2,centers=[[1.5,1.5]],cluster_std=0.2)#將兩個數(shù)據(jù)級聯(lián)X=np.concatenate([X,X3])y=np.concatenate([y,y3+2])plt.scatter(X[:,0],X[:,1],c=y生成的數(shù)據(jù)如圖:密度聚類應(yīng)用示例

密度聚類應(yīng)用示例

kmeans#有缺陷kmeans=KMeans(3)kmeans.fit(X)y_=kmeans.predict(X)plt.scatter(X[:,0],X[:,1],c=y_)kmeans形成的聚類效果如圖10-13所示:可以看出,效果很不好。密度聚類應(yīng)用示例

定義dbcandbscan=DBSCAN(eps=0.15,min_samples=5)dbscan.fit(X)#賦值y_=dbscan.fit_predict(X)y_=dbscan.labels_plt.scatter(X[:,0],X[:,1],c=y_)DBSCAN的形成的聚類效果如圖10-14所示:本章主要介紹了聚類算法的基本原理和常見聚類算法,包括Kmeans,層次聚類,密度聚類等,同時也介紹了不同算法在應(yīng)用層面的差異性和優(yōu)缺點,為后續(xù)算法的選型提供了比較好的理論參考??偨Y(jié)謝謝第十一章:降維與關(guān)聯(lián)規(guī)則學(xué)習(xí)目標通過本章的學(xué)習(xí):掌握降維的基本思想掌握主成分分析(PCA)的步驟。掌握關(guān)聯(lián)規(guī)則算法的基本原理和挖掘過程。

1.降維技術(shù)2.

PCA降維技術(shù)的原理與實現(xiàn)3.LDA降維技術(shù)的原理與實現(xiàn)4.關(guān)聯(lián)規(guī)則挖掘算法的基本原理5.關(guān)聯(lián)規(guī)則挖掘應(yīng)用算法降維技術(shù)背景(1)維數(shù)災(zāi)難背景現(xiàn)實應(yīng)用中屬性維度成千上萬,在高維度情況下會帶來很多麻煩,而且當維度大的時候,數(shù)據(jù)樣本一般分布的非常稀疏,這是所有學(xué)習(xí)算法要面對的問題,降維技術(shù)應(yīng)運而生。數(shù)據(jù)降維降維是對事物的特征進行壓縮和篩選,該項任務(wù)相對比較抽象。如果沒有特定領(lǐng)域知識,無法預(yù)先決定采用哪些數(shù)據(jù),比如在人臉識別任務(wù)中,如果直接使用圖像的原始像素信息,數(shù)據(jù)的維度會非常高,通常會利用降維技術(shù)對圖像進行處理,保留下最具有區(qū)分度的像素組合。降維技術(shù)背景(2)對數(shù)據(jù)降維還有如下原因:(1)使得數(shù)據(jù)集更易使用(2)降低算法的計算開銷(3)去除噪聲(4)使得結(jié)果容易理解降維技術(shù)-

主成分分析(1)主成分分析(PCA)

在PCA中,數(shù)據(jù)從原來的坐標系轉(zhuǎn)換到新的坐標系,由數(shù)據(jù)本身決定。轉(zhuǎn)換坐標系時,以方差最大的方向作為坐標軸方向,因為數(shù)據(jù)的最大方差給出了數(shù)據(jù)的最重要的信息。第一個新坐標軸選擇的是原始數(shù)據(jù)中方差最大的方法,第二個新坐標軸選擇的是與第一個新坐標軸正交且方差次大的方向。重復(fù)該過程,重復(fù)次數(shù)為原始數(shù)據(jù)的特征維數(shù)。大部分方差都包含在最前面的幾個新坐標軸中,因此,可以忽略余下的坐標軸,即對數(shù)據(jù)進行了降維處理。降維技術(shù)

-

線性判別式分析(2)線性判別式分析(LDA)

線性判別式分析是將高維的模式樣本投影到最佳判別矢量空間,以達到抽取分類信息和壓縮特征空間維數(shù)的效果,投影后保證模式樣本在新的子空間有最大的類間距離和最小的類內(nèi)距離,即模式在該空間中有最佳的可分離性,可以達到對數(shù)據(jù)進行的降維處理。降維方法總體理解(1)樣本數(shù)據(jù)集的理解將數(shù)據(jù)集考慮成矩陣,每行對應(yīng)一個樣本,每列對應(yīng)一個特征或者維度。在降維方法中,都是把數(shù)據(jù)集看作矩陣形式,數(shù)學(xué)上有非常多關(guān)于矩陣的處理技巧和定理,降維的方法證明均源于此。降維方法總體理解(2)機器學(xué)習(xí)領(lǐng)域中所謂的降維就是指采用某種映射方法,將原高維空間中的數(shù)據(jù)點映射到低維度的空間。降維的本質(zhì)是學(xué)習(xí)一個映射函數(shù)f:x->y,其中x是原始數(shù)據(jù)點的表達,目前最多使用向量表達形式。y是數(shù)據(jù)點映射后的低維向量表達,通常y的維度小于x的維度(當然也可以提高維度)。映射函數(shù)f可能是顯式的或隱式的、線性的或非線性的。在很多算法中,降維算法成為了數(shù)據(jù)預(yù)處理的一部分。一些算法如果沒有降維預(yù)處理,就很難得到很好的效果。1.降維技術(shù)2.PCA降維技術(shù)的原理與實現(xiàn)3.LDA降維技術(shù)的原理與實現(xiàn)4.關(guān)聯(lián)規(guī)則挖掘算法的基本原理5.關(guān)聯(lián)規(guī)則挖掘應(yīng)用算法PCA降維技術(shù)(1)PCA(PrincipalComponentAnalysis,主成分分析)在高維向量空間中,隨著維度的增加,數(shù)據(jù)呈現(xiàn)出越來越稀疏的分布特點,增加后續(xù)算法的復(fù)雜度,而很多時候雖然數(shù)據(jù)維度較高,但是很多維度之間存在相關(guān)性,他們表達的信息有重疊。PCA的思想是將n維特征映射到k維上(k<n),這k維是全新的正交特征。這k維特征稱為主成分,是重新構(gòu)造出來的k維特征,而不是簡單地從n維特征中去除其余n-k維特征(這也是與特征選擇特征子集的方法的區(qū)別)。PCA降維技術(shù)(2)PCA的目的是在高維數(shù)據(jù)中找到最大方差的方向,接著映射它到比最初維數(shù)小或相等的新的子空間。PCA降維技術(shù)的原理(1)PCA應(yīng)用本身是基于一定假設(shè)的:1.線性即特征的變換是線性變換,作用有限,目前也有非線性的特征變換kernelPCA。2.處理的數(shù)據(jù)分布式服從指數(shù)族概率密度函數(shù),即能通過均值和協(xié)方差來表征數(shù)據(jù)的分布,因為只有在這個情況下信噪比和協(xié)方差矩陣才能表示噪聲和數(shù)據(jù)冗余。(好在實際應(yīng)用中常見的數(shù)據(jù)是服從高斯分布或近似高斯分布)。PCA降維技術(shù)的原理(2)主成分分析(PCA)的基本原理

在一組多變量的數(shù)據(jù)中,很多變量常常是一起變動的。一個原因是很多變量是同一個驅(qū)動影響的的結(jié)果。在很多系統(tǒng)中,只有少數(shù)幾個這樣的驅(qū)動,但是多余的儀器使我們測量了很多的系統(tǒng)變量。當這種情況發(fā)生的時候,你需要處理的就是冗余的信息。而你可以通過用一個簡單的新變量代替這組變量來簡化此問題。PCA降維技術(shù)的原理(3)

第一主成分是數(shù)據(jù)空間的一個軸。當你把各觀察值投影到這個軸時,結(jié)果會形成一個新變量,這個變量的方差是所有可選的軸中最大的。第二主成分是空間的另一個軸,它垂直于第一個軸。投影數(shù)據(jù)到這個軸上將得到另一組變量,此變量的方差是所有可選的軸中最大的。PCA降維技術(shù)的原理(4)特征向量(eigenvector)是一個矩陣的滿足如下公式的非零向量:

特征向量和特征值只能由方陣得出,且并非所有方陣都有特征向量和特征值。如果一個矩陣有特征向量和特征值,那么它的每個維度都有一對特征向量和特征值。矩陣的主成分是其協(xié)方差矩陣的特征向量,按照對應(yīng)的特征值大小排序。PCA降維技術(shù)的原理(5)

最大的特征值就是第一主成分,第二大的特征值就是第二主成分,以此類推。把數(shù)據(jù)映射到主成分上,第一主成分是最大特征值對應(yīng)的特征向量,因此我們要建一個轉(zhuǎn)換矩陣,它的每一列都是主成分的特征向量。如果我們要把5維數(shù)據(jù)降成3維,那么我們就要用一個3維矩陣做轉(zhuǎn)換矩陣,用特征向量中的前三個主成分作為轉(zhuǎn)換矩陣。若把我們的2維數(shù)據(jù)映射成1維,那么我們就要用一個1維矩陣做轉(zhuǎn)換矩陣,用特征向量中的第一主成分作為轉(zhuǎn)換矩陣。最后,我們用數(shù)據(jù)矩陣右乘轉(zhuǎn)換矩陣。PCA算法流程輸入:n維特征的樣本數(shù)據(jù)集??輸出:降到p維后的樣本集??’對所有樣本構(gòu)成的矩陣X進行去中心化;求出X的協(xié)方差矩陣C;利用特征值分解,求出協(xié)方差矩陣C的特征值及對應(yīng)的特征向量;將特征向量按對應(yīng)特征值大小從上到下按行排列成矩陣,根據(jù)實際業(yè)務(wù)場景,取前p列組成新的坐標矩陣W。令原始數(shù)據(jù)集與新坐標舉證W相乘,得到的新的數(shù)據(jù)集(矩陣)即為降到p維后的坐標。PCA優(yōu)缺點優(yōu)點:以方差衡量信息的無監(jiān)督學(xué)習(xí),不受樣本標簽限制。各主成分之間正交,可消除原始數(shù)據(jù)成分間的相互影響。計算方法簡單,主要運算是奇異值分解,易于在計算機上實現(xiàn)??蓽p少指標選擇的工作量。缺點:主成分解釋其含義往往具有一定的模糊性,不如原始樣本特征的解釋性強。方差小的非主成分也可能含有對樣本差異的重要信息,因降維丟棄可能對后續(xù)數(shù)據(jù)處理有影響。PCA降維的Python實現(xiàn)

#Python實現(xiàn)PCAimportnumpyasnpdefpca(X,k):#kisthecomponentsyouwant#每個特征的平均值n_samples,n_features=X.shapemean=np.array([np.mean(X[:,i])foriinrange(n_features)])#規(guī)范化norm_X=X-mean#散射矩陣scatter_matrix=np.dot(np.transpose(norm_X),norm_X)#計算特征向量和特征值eig_val,eig_vec=np.linalg.eig(scatter_matrix)eig_pairs=[(np.abs(eig_val[i]),eig_vec[:,i])foriinrange(n_features)]PCA降維的Python實現(xiàn)

#根據(jù)eig_val從最高到最低對eig_vec進行排序eig_pairs.sort(reverse=True)#選擇最上面的keig_vecfeature=np.array([ele[1]foreleineig_pairs[:k]])#獲取新數(shù)據(jù)data=np.dot(norm_X,np.transpose(feature))returndataX=np.array([[-1,1],[-2,-1],[-3,-2],[1,1],[2,1],[3,2]])print(pca(X,1))PCA算法使用方法(1)在sklearn庫中,可以使用sklearn.decomposition.PCA加載PCA進行降維。具體方法:PCA(n_components=None,copy=True,whiten=False,svd_solver=‘a(chǎn)uto’)主要參數(shù)有:n_components:指定主成分的個數(shù),即降維后數(shù)據(jù)的維度。copy:在運行算法時,是否將原始訓(xùn)練數(shù)據(jù)復(fù)制一份。等于True表示在原始數(shù)據(jù)的副本上進行運算,原始訓(xùn)練數(shù)據(jù)的值不會有任何改變;等于False在原始數(shù)據(jù)上進行降維計算,原始訓(xùn)練數(shù)據(jù)的值會改。Whiten:白化,使得每個特征具有相同的方差。svd_solver:可選項為{‘a(chǎn)uto’,‘full’,‘a(chǎn)rpack’,‘randomized’},表示解析器計算SVD的策略。PCA算法使用方法(2)在sklearn庫中,可以使用sklearn.decomposition.PCA加載PCA進行降維。主要屬性:components_:降維后各主成分方向,并按照各主成分的方差值大小排序。explained_variance_:降維后各主成分的方差值,方差值越大,越主要。explained_variance_ratio_:降維后的各主成分的方差值占總方差值的比例,比例越大,則越主要。singular_values_:奇異值分解得到的前n_components個中最大的奇異值。1.降維技術(shù)2.PCA降維技術(shù)的原理與實現(xiàn)3.LDA降維技術(shù)的原理與實現(xiàn)4.關(guān)聯(lián)規(guī)則挖掘算法的基本原理5.關(guān)聯(lián)規(guī)則挖掘應(yīng)用算法LDA介紹(1)

線性判別式分析(LinearDiscriminantAnalysis),簡稱為LDA。也稱為Fisher線性判別(FisherLinearDiscriminant,F(xiàn)LD),是模式識別的經(jīng)典算法,在1996年由Belhumeur引入模式識別和人工智能領(lǐng)域。 LDA是一種監(jiān)督學(xué)習(xí)的降維技術(shù),將數(shù)據(jù)在低維度上進行投影,投影后希望每一種類別數(shù)據(jù)的投影點盡可能的接近,而不同類別的數(shù)據(jù)的類別中心之間的距離盡可能的大。LDA介紹(2)LDA(LinearDiscriminantAnalysis)線性判別式分析,也叫Fisher線性判別,是模式識別中的經(jīng)典算法,它的數(shù)據(jù)集的每個樣本是有類別輸出的。思想:投影后類內(nèi)距離最小,類間距離最大。線性判別:LDA的主要思想是將一個高維空間中的數(shù)據(jù)投影到一個較低維的空間中,且投影后要保證各個類別的類內(nèi)方差小而類間均值差別大,這意味著同一類的高維數(shù)據(jù)投影到低維空間后相同類別的聚在一起,而不同類別之間相距較遠。判別問題與線性判別函數(shù)

1.方法分類:線性判別函數(shù)、支持向量機、fisher線性判別函數(shù)廣義線性判別函數(shù)、非線性判別函數(shù)、核學(xué)習(xí)機2.基本思想:步一:給定一個判別函數(shù),且已知該函數(shù)的參數(shù)形式;步二:采用樣本來訓(xùn)練判別函數(shù)的參數(shù);判別問題與線性判別函數(shù)

步三:對于新樣本,采用判別函數(shù)對其進行決策,并按照一些準則來完成分類學(xué)習(xí)判別函數(shù)的基本技術(shù)路線;假定有n個d維空間中的樣本,每個樣本的類別標簽已知,且一共有c個不同的類別假定判別函數(shù)的形式已知,尋找一個判別函數(shù)對于給定的新樣本x,判定它屬于哪個類別LDA算法優(yōu)缺點LDA算法既可以用來降維,也可以用來分類,主要用于降維,尤其在進行圖像識別相關(guān)的數(shù)據(jù)分析時,LDA是一個有力的工具。優(yōu)點:在降維過程中可以使用類別的先驗經(jīng)驗。LDA在樣本分類信息依賴均值而不是方差的時候,比PCA之類的算法較

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論