【scikit-learn基础】--『监督学习』之 随机森林分类
隨機(jī)森林分類算法是一種基于集成學(xué)習(xí)(ensemble learning)的機(jī)器學(xué)習(xí)算法,
它的基本原理是通過對(duì)多個(gè)決策樹的預(yù)測(cè)結(jié)果進(jìn)行平均或投票,以產(chǎn)生最終的分類結(jié)果。
隨機(jī)森林算法可用于回歸和分類問題。
關(guān)于隨機(jī)森林算法在回歸問題上的應(yīng)用可參考:TODO
隨機(jī)森林分類算法可以應(yīng)用于各種需要進(jìn)行分類或預(yù)測(cè)的問題,如垃圾郵件識(shí)別、信用卡欺詐檢測(cè)、疾病預(yù)測(cè)等,
它也可以與其他機(jī)器學(xué)習(xí)算法進(jìn)行結(jié)合,以進(jìn)一步提高預(yù)測(cè)準(zhǔn)確率。
1. 算法概述
隨機(jī)森林的基本原理是構(gòu)建多棵決策樹,每棵樹都是基于原始訓(xùn)練數(shù)據(jù)的一個(gè)隨機(jī)子集進(jìn)行訓(xùn)練。在構(gòu)建每棵樹時(shí),算法會(huì)隨機(jī)選擇一部分特征進(jìn)行考慮,而不是考慮所有的特征。
然后,對(duì)于一個(gè)新的輸入樣本,每棵樹都會(huì)進(jìn)行分類預(yù)測(cè),并將預(yù)測(cè)結(jié)果提交給“森林”進(jìn)行最終的分類決策。
一般來說,森林會(huì)選擇出現(xiàn)次數(shù)最多的類別作為最終的分類結(jié)果。
理論上來看,隨機(jī)森林分類應(yīng)該比決策樹分類有更加好的準(zhǔn)確度,特別是在高維度的數(shù)據(jù)情況下。
2. 創(chuàng)建樣本數(shù)據(jù)
為了后面比較隨機(jī)森林分類算法和決策樹算法的準(zhǔn)確性,創(chuàng)建分類多一些(8個(gè)分類標(biāo)簽)的樣本數(shù)據(jù)。
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
# 分類數(shù)據(jù)的樣本生成器
X, y = make_classification(
n_samples=1000, n_classes=8, n_clusters_per_class=2, n_informative=6
)
plt.scatter(X[:, 0], X[:, 1], marker="o", c=y, s=25)
plt.show()
3. 模型訓(xùn)練
首先,分割訓(xùn)練集和測(cè)試集。
from sklearn.model_selection import train_test_split
# 分割訓(xùn)練集和測(cè)試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1)
這次按照9:1的比例來劃分訓(xùn)練集和測(cè)試集。
用決策樹分類模型來訓(xùn)練數(shù)據(jù):
from sklearn.tree import DecisionTreeClassifier
reg_names = [
"ID3算法",
"C4.5算法",
"CART算法",
]
# 定義
regs = [
DecisionTreeClassifier(criterion="entropy"),
DecisionTreeClassifier(criterion="log_loss"),
DecisionTreeClassifier(criterion="gini"),
]
# 訓(xùn)練模型
for reg in regs:
reg.fit(X_train, y_train)
# 在測(cè)試集上進(jìn)行預(yù)測(cè)
y_preds = []
for reg in regs:
y_pred = reg.predict(X_test)
y_preds.append(y_pred)
for i in range(len(y_preds)):
correct_pred = np.sum(y_preds[i] == y_test)
print("決策樹【{}】 預(yù)測(cè)正確率:{:.2f}%".format(reg_names[i], correct_pred / len(y_pred) * 100))
# 運(yùn)行結(jié)果
決策樹【ID3算法】 預(yù)測(cè)正確率:43.00%
決策樹【C4.5算法】 預(yù)測(cè)正確率:42.00%
決策樹【CART算法】 預(yù)測(cè)正確率:42.00%
用隨機(jī)森林分類模型來訓(xùn)練數(shù)據(jù):
from sklearn.ensemble import RandomForestClassifier
reg_names = [
"ID3算法",
"C4.5算法",
"CART算法",
]
# 定義
regs = [
RandomForestClassifier(criterion="entropy"),
RandomForestClassifier(criterion="log_loss"),
RandomForestClassifier(criterion="gini"),
]
# 訓(xùn)練模型
for reg in regs:
reg.fit(X_train, y_train)
# 在測(cè)試集上進(jìn)行預(yù)測(cè)
y_preds = []
for reg in regs:
y_pred = reg.predict(X_test)
y_preds.append(y_pred)
for i in range(len(y_preds)):
correct_pred = np.sum(y_preds[i] == y_test)
print("隨機(jī)森林【{}】 預(yù)測(cè)正確率:{:.2f}%".format(reg_names[i], correct_pred / len(y_pred) * 100))
# 運(yùn)行結(jié)果
隨機(jī)森林【ID3算法】 預(yù)測(cè)正確率:64.00%
隨機(jī)森林【C4.5算法】 預(yù)測(cè)正確率:63.00%
隨機(jī)森林【CART算法】 預(yù)測(cè)正確率:69.00%
可以看出,隨機(jī)森林分類的準(zhǔn)確性確實(shí)比決策樹分類提高了。
不過,運(yùn)行過程中也可以發(fā)現(xiàn),隨機(jī)森林的訓(xùn)練時(shí)間會(huì)比決策樹長(zhǎng)一些。
4. 總結(jié)
隨機(jī)森林分類算法的優(yōu)勢(shì)在于:
- 抗過擬合能力強(qiáng):由于采用隨機(jī)選擇特征的方式,可以有效地避免過擬合問題。
- 泛化能力強(qiáng):通過對(duì)多個(gè)決策樹的結(jié)果進(jìn)行投票或平均,可以獲得更好的泛化性能。
- 對(duì)數(shù)據(jù)特征的選取具有指導(dǎo)性:在構(gòu)建決策樹時(shí)會(huì)對(duì)特征進(jìn)行選擇,這可以為后續(xù)的特征選擇提供指導(dǎo)。
- 適用于大規(guī)模數(shù)據(jù)集:可以有效地處理大規(guī)模數(shù)據(jù)集,并且訓(xùn)練速度相對(duì)較快。
當(dāng)然,隨機(jī)森林分類算法也存在一些劣勢(shì):
- 需要大量的內(nèi)存和計(jì)算資源:由于需要構(gòu)建多個(gè)決策樹,因此需要更多的內(nèi)存和計(jì)算資源。
- 需要調(diào)整參數(shù):性能很大程度上取決于參數(shù)的設(shè)置,如樹的數(shù)量、每個(gè)節(jié)點(diǎn)的最小樣本數(shù)等,這些參數(shù)的設(shè)置需要一定的經(jīng)驗(yàn)和實(shí)驗(yàn)。
- 對(duì)新樣本的預(yù)測(cè)性能不穩(wěn)定:由于是通過投票或平均多個(gè)決策樹的結(jié)果來進(jìn)行預(yù)測(cè),因此對(duì)新樣本的預(yù)測(cè)性能可能會(huì)受到影響。
總結(jié)
以上是生活随笔為你收集整理的【scikit-learn基础】--『监督学习』之 随机森林分类的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: uniapp中实现H5录音和上传、实时语
- 下一篇: 【OpenVINO】 使用 OpenVI