日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

数据挖掘的11大算法及python实现(个人笔记整理,非教学用)

發(fā)布時間:2023/12/15 python 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据挖掘的11大算法及python实现(个人笔记整理,非教学用) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

分類算法:C4.5,樸素貝葉斯(Naive Bayes),SVM,KNN,Adaboost,CARTl 。聚類算法:K-Means,EMl 。關(guān)聯(lián)分析:Aprioril 。連接分析:PageRank

文章目錄

  • 準備數(shù)據(jù)
  • 一、C4.5 算法
  • 二、CART 算法
  • 三、SVM 算法
  • 四、KNN算法
  • 五、AdaBoost算法
  • 六、Apriori算法
  • 七、K-Means算法
  • 八、樸素貝葉斯(Naive Bayes)算法
  • 九、EM算法
  • 十、PageRank算法
  • 十一、隨機森林(Random Forest)算法
  • 總結(jié)


準備數(shù)據(jù)

我們統(tǒng)一用鳶尾花作為測試數(shù)據(jù)以便能對比各個算法的性能。

國際權(quán)威的學術(shù)組織 ICDM (the IEEE International Conference on Data Mining)評選出了十大經(jīng)典的算法。按照不同的目的,我可以將這些算法分成四類。


分類算法:C4.5(ID3),樸素貝葉斯(Naive Bayes),SVM,KNN,Adaboost,CARTl ,randomForest,bugging
聚類算法:K-Means,EMl
關(guān)聯(lián)分析:Aprioril
連接分析:PageRank

一、C4.5 算法

C4.5 是決策樹的算法,它創(chuàng)造性地在決策樹構(gòu)造過程中就進行了剪枝,并且可以處理連續(xù)的屬性,也能對不完整的數(shù)據(jù)進行處理。它可以說是決策樹分類中,具有里程碑式意義的算法。
信息熵(entropy)的概念,它表示了信息的不確定度.

ID3 算法計算的是信息增益,信息增益指的就是劃分可以帶來純度的提高,信息熵的下降。它的計算公式,是父親節(jié)點的信息熵減去所有子節(jié)點的信息熵。在計算的過程中,我們會計算每個子節(jié)點的歸一化信息熵,即按照每個子節(jié)點在父節(jié)點中出現(xiàn)的概率,來計算這些子節(jié)點的信息熵。所以信息增益的公式可以表示為:

公式中 D 是父親節(jié)點,Di 是子節(jié)點,Gain(D,a) 中的 a 作為 D 節(jié)點的屬性選擇。
ID3 就是要將信息增益最大的節(jié)點作為父節(jié)點,這樣可以得到純度高的決策樹,所以我們將信息增益最大的節(jié)點作為根節(jié)點。ID3 的算法規(guī)則相對簡單,可解釋性強。同樣也存在缺陷,比如我們會發(fā)現(xiàn) ID3 算法傾向于選擇取值比較多的屬性。
ID3 有一個缺陷就是,有些屬性可能對分類任務(wù)沒有太大作用,但是他們?nèi)匀豢赡軙贿x為最優(yōu)屬性。
C4.5 都在哪些方面改進了 ID3 呢?
C4.5 采用信息增益率的方式來選擇屬性。信息增益率 = 信息增益 / 屬性熵。
ID3 構(gòu)造決策樹的時候,容易產(chǎn)生過擬合的情況。在 C4.5 中,會在決策樹構(gòu)造之后采用悲觀剪枝(PEP),這樣可以提升決策樹的泛化能力。悲觀剪枝是后剪枝技術(shù)中的一種,通過遞歸估算每個內(nèi)部節(jié)點的分類錯誤率,比較剪枝前后這個節(jié)點的分類錯誤率來決定是否對其進行剪枝。這種剪枝方法不再需要一個單獨的測試數(shù)據(jù)集。
針對數(shù)據(jù)集不完整的情況,C4.5 也可以進行處理。
C4.5 需要對數(shù)據(jù)集進行多次掃描,算法效率相對較低。
代碼:

from sklearn import tree from sklearn.datasets import load_iris from sklearn.model_selection import train_test_splitX,y = load_iris(return_X_y=True) train_X,test_X,train_y,test_y = train_test_split(X,y,test_size=0.33,random_state=0) clf = tree.DecisionTreeClassifier(criterion="entropy") clf = clf.fit(train_X,train_y) print(clf.score(test_X,test_y))

準確率:96%

二、CART 算法

當基尼系數(shù)越小的時候,說明樣本之間的差異性小,不確定程度低。分類的過程本身是一個不確定度降低的過程,即純度的提升過程。所以 CART 算法在構(gòu)造分類樹的時候,會選擇基尼系數(shù)最小的屬性作為屬性的劃分。

GINI 系數(shù)的計算公式:

節(jié)點 D 的基尼系數(shù)等于子節(jié)點 D1 和 D2 的歸一化基尼系數(shù)之和,用公式表示為:

from sklearn import tree from sklearn.datasets import load_iris from sklearn.model_selection import train_test_splitX,y = load_iris(return_X_y=True) train_X,test_X,train_y,test_y = train_test_split(X,y,test_size=0.33,random_state=0) clf = tree.DecisionTreeClassifier(criterion="gini") clf = clf.fit(train_X,train_y) print(clf.score(test_X,test_y))

準確率:96%

三、SVM 算法

SVM 的中文叫支持向量機,英文是 Support Vector Machine,簡稱 SVM。SVM 在訓練中建立了一個超平面的分類模型。
能存在多個最優(yōu)決策面,它們都能把數(shù)據(jù)集正確分開,這些最優(yōu)決策面的分類間隔可能是不同的,而那個擁有“最大間隔”(max margin)的決策面就是 SVM 要找的最優(yōu)解。
非線性 SVM 中,核函數(shù)的選擇就是影響 SVM 最大的變量。最常用的核函數(shù)有線性核、多項式核、高斯核、拉普拉斯核、sigmoid 核,或者是這些核函數(shù)的組合。這些函數(shù)的區(qū)別在于映射方式的不同。通過這些核函數(shù),我們就可以把樣本空間投射到新的高維空間中。
SVM 最主要的思想就是硬間隔、軟間隔和核函數(shù).
kernel 代表核函數(shù)的選擇,它有四種選擇,只不過默認是 rbf,即高斯核函數(shù)。
linear:線性核函數(shù)
poly:多項式核函數(shù)
rbf:高斯核函數(shù)(默認)
sigmoid:sigmoid 核函數(shù)這四種函數(shù)代表不同的映射方式,如何選擇這 4 種核函數(shù)呢?
線性核函數(shù),是在數(shù)據(jù)線性可分的情況下使用的,運算速度快,效果好。不足在于它不能處理線性不可分的數(shù)據(jù)。
多項式核函數(shù)可以將數(shù)據(jù)從低維空間映射到高維空間,但參數(shù)比較多,計算量大。
高斯核函數(shù)同樣可以將樣本映射到高維空間,但相比于多項式核函數(shù)來說所需的參數(shù)比較少,通常性能不錯,所以是默認使用的核函數(shù)。
了解深度學習的同學應(yīng)該知道 sigmoid 經(jīng)常用在神經(jīng)網(wǎng)絡(luò)的映射中。因此當選用 sigmoid 核函數(shù)時,SVM 實現(xiàn)的是多層神經(jīng)網(wǎng)絡(luò)。

from sklearn import svm from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScalerX,y = load_iris(return_X_y=True)train_X,test_X,train_y,test_y = train_test_split(X,y,test_size=0.33,random_state=0) # 采用Z-Score規(guī)范化數(shù)據(jù),保證每個特征維度的數(shù)據(jù)均值為0,方差為1 ss = StandardScaler() train_X = ss.fit_transform(train_X) test_X = ss.transform(test_X) clf = svm.SVC(kernel='rbf') clf = clf.fit(train_X,train_y) print(clf.score(test_X,test_y))

準確率96%。

四、KNN算法

KNN 也叫 K 最近鄰算法,英文是 K-Nearest Neighbor。所謂 K 近鄰,就是每個樣本都可以用它最接近的 K 個鄰居來代表。如果一個樣本,它的 K 個最接近的鄰居都屬于分類 A,那么這個樣本也屬于分類 A。
KNN 的工作原理。整個計算過程分為三步:
計算待分類物體與其他物體之間的距離;
統(tǒng)計距離最近的 K 個鄰居;
對于 K 個最近的鄰居,它們屬于哪個分類最多,待分類物體就屬于哪一類。
交叉驗證的思路就是,把樣本集中的大部分樣本作為訓練集,剩余的小部分樣本用于預測,來驗證分類模型的準確性。所以在 KNN 算法中,我們一般會把 K 值選取在較小的范圍內(nèi),同時在驗證集上準確率最高的那一個最終確定作為 K 值。
KNN算法是機器學習中最簡單的算法之一,但是工程實現(xiàn)上,如果訓練樣本過大,則傳統(tǒng)的遍歷全樣本尋找k近鄰的方式將導致性能的急劇下降。 因此,為了優(yōu)化效率,不同的訓練數(shù)據(jù)存儲結(jié)構(gòu)被納入到實現(xiàn)方式之中。在sikit-learn中的KNN算法參數(shù)也提供了’kd_tree’之類的算法選擇項。
n_neighbors:默認為5,就是k-NN的k的值,選取最近的k個點。
weights:默認是uniform,參數(shù)可以是uniform、distance

from sklearn.neighbors import KNeighborsClassifier from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScalerX,y = load_iris(return_X_y=True)train_X,test_X,train_y,test_y = train_test_split(X,y,test_size=0.33,random_state=0) # 采用Z-Score規(guī)范化數(shù)據(jù),保證每個特征維度的數(shù)據(jù)均值為0,方差為1 ss = StandardScaler() train_X = ss.fit_transform(train_X) test_X = ss.transform(test_X) clf = KNeighborsClassifier(n_neighbors=5,algorithm='kd_tree',weights='uniform') clf = clf.fit(train_X,train_y) print(clf.score(test_X,test_y))

五、AdaBoost算法

Adaboost 在訓練中建立了一個聯(lián)合的分類模型。boost 在英文中代表提升的意思,所以 Adaboost 是個構(gòu)建分類器的提升算法。它可以讓我們多個弱的分類器組成一個強的分類器,所以 Adaboost 也是一個常用的分類算法。
算法通過訓練多個弱分類器,將它們組合成一個強分類器,也就是我們俗話說的“三個臭皮匠,頂個諸葛亮”。


假設(shè)弱分類器為 Gi?(x),它在強分類器中的權(quán)重 αi?,那么就可以得出強分類器 f(x):

如果弱分類器的分類效果好,那么權(quán)重應(yīng)該比較大,如果弱分類器的分類效果一般,權(quán)重應(yīng)該降低。所以我們需要基于這個弱分類器對樣本的分類錯誤率來決定它的權(quán)重,用公式表示就是:

其中 ei? 代表第 i 個分類器的分類錯誤率。
AdaBoost 算法是通過改變樣本的數(shù)據(jù)分布來實現(xiàn)的。AdaBoost 會判斷每次訓練的樣本是否正確分類,對于正確分類的樣本,降低它的權(quán)重,對于被錯誤分類的樣本,增加它的權(quán)重。再基于上一次得到的分類準確率,來確定這次訓練樣本中每個樣本的權(quán)重。然后將修改過權(quán)重的新數(shù)據(jù)集傳遞給下一層的分類器進行訓練。這樣做的好處就是,通過每一輪訓練樣本的動態(tài)權(quán)重,可以讓訓練的焦點集中到難分類的樣本上,最終得到的弱分類器的組合更容易得到更高的分類準確率。

n_estimators:算法的最大迭代次數(shù),也是分類器的個數(shù),每一次迭代都會引入一個新的弱分類器來增加原有的分類器的組合能力。默認是 50。

from sklearn.ensemble import AdaBoostClassifier from sklearn.tree import DecisionTreeClassifier from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.metrics import *X,y = load_iris(return_X_y=True) train_X,test_X,train_y,test_y = train_test_split(X,y,test_size=0.33,random_state=0) # 采用Z-Score規(guī)范化數(shù)據(jù),保證每個特征維度的數(shù)據(jù)均值為0,方差為1 ss = StandardScaler() train_X = ss.fit_transform(train_X) test_X = ss.transform(test_X) clf = AdaBoostClassifier(base_estimator=DecisionTreeClassifier(),n_estimators=50) clf = clf.fit(train_X,train_y) pre_y = clf.predict(test_X) for i,j in zip(pre_y,test_y):print(i,j) print('%.4lf'%accuracy_score(pre_y,test_y))

準確率:96%。
AdaBoost是串行的多個弱分類器組合,還有一類是并行的弱分類器組合,叫Bagging,代表是隨機森林。

六、Apriori算法

Apriori 是一種挖掘關(guān)聯(lián)規(guī)則(association rules)的算法,它通過挖掘頻繁項集(frequent item sets)來揭示物品之間的關(guān)聯(lián)關(guān)系,被廣泛應(yīng)用到商業(yè)挖掘和網(wǎng)絡(luò)安全等領(lǐng)域中。頻繁項集是指經(jīng)常出現(xiàn)在一起的物品的集合,關(guān)聯(lián)規(guī)則暗示著兩種物品之間可能存在很強的關(guān)系。
Apriori 算法其實就是查找頻繁項集 (frequent itemset) 的過程。頻繁項集就是支持度大于等于最小支持度 (Min Support) 閾值的項集,所以小于最小值支持度的項目就是非頻繁項集,算法進行刪除,而大于等于最小支持度的項集就是頻繁項集,然后做進一步劃分。
Apriori 在計算的過程中有以下幾個缺點:可能產(chǎn)生大量的候選集。因為采用排列組合的方式,把可能的項集都組合出來了;每次計算都需要重新掃描數(shù)據(jù)集,來計算每個項集的支持度。
所以 Apriori 算法會浪費很多計算空間和計算時間,為此人們提出了 FP-Growth 算法,它的特點是:創(chuàng)建了一棵 FP 樹來存儲頻繁項集。在創(chuàng)建前對不滿足最小支持度的項進行刪除,減少了存儲空間。整個生成過程只遍歷數(shù)據(jù)集 2 次,大大減少了計算量。所以在實際工作中,我們常用 FP-Growth 來做頻繁項集的挖掘,下面我給你簡述下 FP-Growth 的原理。
FP就是根據(jù)結(jié)果出現(xiàn)的頻繁數(shù)進行構(gòu)建的,構(gòu)建過程如下問:FP-Growth

from efficient_apriori import aprioridata = [['牛奶','面包','尿布'], ['可樂','面包', '尿布', '啤酒'],['牛奶','尿布', '啤酒', '雞蛋'], ['面包', '牛奶', '尿布','啤酒'], ['面包', '牛奶', '尿布', '可樂']]itemsets ,rules = apriori(data,min_support=0.5,min_confidence=1) print(itemsets) print(rules)

輸出有關(guān)聯(lián)度的列表:

[{牛奶} -> {尿布}, {面包} -> {尿布}, {啤酒} -> {尿布}, {牛奶, 面包} -> {尿布}]

七、K-Means算法

K-Means 算法是一個聚類算法。想把物體劃分成 K 類。假設(shè)每個類別里面,都有個“中心點”,它是這個類別的核心。現(xiàn)在有一個新點要歸類,這時候就只要計算這個新點與 K 個中心點的距離,距離哪個中心點近,就變成了哪個類別。
K-Means是無監(jiān)督學習,隨機指定質(zhì)心,然后迭代更新質(zhì)心位置,知道所有點不在發(fā)生劃分改變?yōu)橹埂?/font>

from sklearn.preprocessing import StandardScaler from sklearn.metrics import *X,y = load_iris(return_X_y=True)train_X,test_X,train_y,test_y = train_test_split(X,y,test_size=0.33,random_state=0) # 采用Z-Score規(guī)范化數(shù)據(jù),保證每個特征維度的數(shù)據(jù)均值為0,方差為1 ss = StandardScaler() train_X = ss.fit_transform(train_X) test_X = ss.transform(test_X) clf = KMeans(n_clusters=3,max_iter=300) clf = clf.fit(train_X,train_y) pre_y = clf.predict(test_X) # for i,j in zip(pre_y,test_y): # print(i,j) print('%.4lf'%accuracy_score(pre_y,test_y))

八、樸素貝葉斯(Naive Bayes)算法

算法原理:利用貝葉斯公式計算特征的概率,也就是利用先驗概率和后驗概率的結(jié)合,概率大的作為分類結(jié)果。
貝葉斯公式:

換個表達形式就會明朗很多,如下:

我們最終求得p(類別|特征)即可!而又可以轉(zhuǎn)化為利用已經(jīng)有的數(shù)據(jù),計算后驗概率和先驗概率。也就是已經(jīng)有的測試數(shù)據(jù)樣本的統(tǒng)計信息,便可以得到p(類別|特征)的值。詳解

sklearn 機器學習包sklearn 的全稱叫 Scikit-learn,它給我們提供了 3 個樸素貝葉斯分類算法,分別是高斯樸素貝葉斯(GaussianNB)、多項式樸素貝葉斯(MultinomialNB)和伯努利樸素貝葉斯(BernoulliNB)。這三種算法適合應(yīng)用在不同的場景下,我們應(yīng)該根據(jù)特征變量的不同選擇不同的算法:
高斯樸素貝葉斯:特征變量是連續(xù)變量,符合高斯分布,比如說人的身高,物體的長度。
多項式樸素貝葉斯:特征變量是離散變量,符合多項分布,在文檔分類中特征變量體現(xiàn)在一個單詞出現(xiàn)的次數(shù),或者是單詞的 TF-IDF 值等。
伯努利樸素貝葉斯:特征變量是布爾變量,符合 0/1 分布,在文檔分類中特征是單詞是否出現(xiàn)。

樸素貝葉斯模型是基于概率論的原理,它的思想是這樣的:對于給出的未知物體想要進行分類,就需要求解在這個未知物體出現(xiàn)的條件下各個類別出現(xiàn)的概率,哪個最大,就認為這個未知物體屬于哪個分類。
貝葉斯原理、貝葉斯分類和樸素貝葉斯這三者之間是有區(qū)別:貝葉斯原理是最大的概念,它解決了概率論中“逆向概率”的問題,在這個理論基礎(chǔ)上,人們設(shè)計出了貝葉斯分類器,樸素貝葉斯分類是貝葉斯分類器中的一種,也是最簡單,最常用的分類器。
樸素貝葉斯之所以樸素是因為它假設(shè)屬性是相互獨立的,因此對實際情況有所約束,如果屬性之間存在關(guān)聯(lián),分類準確率會降低。不過好在對于大部分情況下,樸素貝葉斯的分類效果都不錯。
樸素貝葉斯分類常用于文本分類,尤其是對于英文等語言來說,分類效果很好。它常用于垃圾文本過濾、情感預測、推薦系統(tǒng)等。

from sklearn.naive_bayes import MultinomialNB from sklearn.datasets import load_iris from sklearn.model_selection import train_test_splitX,y = load_iris(return_X_y=True) train_X,test_X,train_y,test_y = train_test_split(X,y,test_size=0.33,random_state=0) clf = MultinomialNB(alpha=0.001) clf = clf.fit(train_X,train_y) print(clf.score(test_X,test_y))

準確率70%。用的是多項式貝葉斯。
如果用高斯貝葉斯:

from sklearn.naive_bayes import MultinomialNB,GaussianNB clf = GaussianNB()

準確率96%。

九、EM算法

EM 的英文是 Expectation Maximization,所以 EM 算法也叫最大期望算法。,是求參數(shù)的最大似然估計的一種方法。
原理是這樣的:假設(shè)我們想要評估參數(shù) A 和參數(shù) B,在開始狀態(tài)下二者都是未知的,并且知道了 A 的信息就可以得到 B 的信息,反過來知道了 B 也就得到了 A。可以考慮首先賦予 A 某個初值,以此得到 B 的估值,然后從 B 的估值出發(fā),重新估計 A 的取值,這個過程一直持續(xù)到收斂為止。EM 算法經(jīng)常用于聚類和機器學習領(lǐng)域中。

首先,隨機選取 PA=正面 PB =正面 的初始值。EM算法的E步驟,是計算在當前的預估參數(shù)下,隱含變量(是A硬幣還是B硬幣)的每個值出現(xiàn)的概率,取最大概率的那個座位本次實驗是A還是B。

from sklearn.mixture import GaussianMixture from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.metrics import *X,y = load_iris(return_X_y=True)train_X,test_X,train_y,test_y = train_test_split(X,y,test_size=0.33,random_state=0) # 采用Z-Score規(guī)范化數(shù)據(jù),保證每個特征維度的數(shù)據(jù)均值為0,方差為1 ss = StandardScaler() train_X = ss.fit_transform(train_X) test_X = ss.transform(test_X) clf = GaussianMixture(n_components=3) clf = clf.fit(train_X,train_y) pre_y = clf.predict(test_X) # for i,j in zip(pre_y,test_y): # print(i,j) print('%.4lf'%accuracy_score(pre_y,test_y))

十、PageRank算法

PageRank 起源于論文影響力的計算方式,如果一篇文論被引入的次數(shù)越多,就代表這篇論文的影響力越強。同樣 PageRank 被 Google 創(chuàng)造性地應(yīng)用到了網(wǎng)頁權(quán)重的計算中:當一個頁面鏈出的頁面越多,說明這個頁面的“參考文獻”越多,當這個頁面被鏈入的頻率越高,說明這個頁面被引用的次數(shù)越高。基于這個原理,我們可以得到網(wǎng)站的權(quán)重劃分。
假設(shè)一共有 4 個網(wǎng)頁 A、B、C、D。它們之間的鏈接信息如圖所示:

一個網(wǎng)頁的影響力 = 所有入鏈集合的頁面的加權(quán)影響力之和,用公式表示為:

例子中,你能看到 A 有三個出鏈分別鏈接到了 B、C、D 上。那么當用戶訪問 A 的時候,就有跳轉(zhuǎn)到 B、C 或者 D 的可能性,跳轉(zhuǎn)概率均為 1/3。B 有兩個出鏈,鏈接到了 A 和 D 上,跳轉(zhuǎn)概率為 1/2。這樣,我們可以得到 A、B、C、D 這四個網(wǎng)頁的轉(zhuǎn)移矩陣 M:

假設(shè) A、B、C、D 四個頁面的初始影響力都是相同的,即:
當進行第一次轉(zhuǎn)移之后,各頁面的影響力 w1? 變?yōu)?#xff1a;

然后我們再用轉(zhuǎn)移矩陣乘以 w1? 得到 w2? 結(jié)果,直到第 n 次迭代后 wn? 影響力不再發(fā)生變化,可以收斂到 (0.3333,0.2222,0.2222,0.2222),也就是對應(yīng)著 A、B、C、D 四個頁面最終平衡狀態(tài)下的影響力。
A 頁面相比于其他頁面來說權(quán)重更大,也就是 PR 值更高。而 B、C、D 頁面的 PR 值相等。

import networkx as nx # 創(chuàng)建有向圖 G = nx.DiGraph() # 有向圖之間邊的關(guān)系 edges = [("A", "B"), ("A", "C"), ("A", "D"), ("B", "A"), ("B", "D"), ("C", "A"), ("D", "B"), ("D", "C")] for edge in edges:G.add_edge(edge[0], edge[1]) pagerank_list = nx.pagerank(G, alpha=1) print("pagerank值是:", pagerank_list)

結(jié)果:

pagerank值是: {'A': 0.33333396911621094, 'B': 0.22222201029459634, 'C': 0.22222201029459634, 'D': 0.22222201029459634}

十一、隨機森林(Random Forest)算法

隨機森林就是通過集成學習的思想:將多棵樹并行集成的一種算法,它的基本單元是決策樹,而它的本質(zhì)屬于機器學習的一大分支——集成學習(Ensemble Learning)方法。
隨機森林的名稱中有兩個關(guān)鍵詞,一個是“隨機”,一個就是“森林”。“森林”我們很好理解,一棵叫做樹,那么成百上千棵就可以叫做森林了,這樣的比喻還是很貼切的,其實這也是隨機森林的主要思想–集成思想的體現(xiàn)。
“隨機”的含義是:如果訓練集大小為N,對于每棵樹而言,隨機且有放回地從訓練集中的抽取N個訓練樣本(這種采樣方式稱為bootstrap sample方法),作為該樹的訓練集。詳解

from sklearn.ensemble import RandomForestClassifier from sklearn.tree import DecisionTreeClassifier from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.metrics import *X,y = load_iris(return_X_y=True) train_X,test_X,train_y,test_y = train_test_split(X,y,test_size=0.33,random_state=0) # 采用Z-Score規(guī)范化數(shù)據(jù),保證每個特征維度的數(shù)據(jù)均值為0,方差為1 ss = StandardScaler() train_X = ss.fit_transform(train_X) test_X = ss.transform(test_X) clf = RandomForestClassifier(n_jobs=-1) clf = clf.fit(train_X,train_y) pre_y = clf.predict(test_X) # for i,j in zip(pre_y,test_y): # print(i,j) print('%.4lf'%accuracy_score(pre_y,test_y))

總結(jié)

了解基本算法原理,盡管我們親自實現(xiàn)算法的可能性不大,了解算法還是挺有用。

總結(jié)

以上是生活随笔為你收集整理的数据挖掘的11大算法及python实现(个人笔记整理,非教学用)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。