Machine Learning: Random Forest Regression Classifier

%matplotlib inline 
#绘图需要的环境
from sklearn.tree import DecisionTreeClassifier #从树的包中导入决策树类
from sklearn.ensemble import RandomForestClassifier #集成算法模块导入随机森林
from sklearn.datasets import load_wine #从数据模块导入红酒数据集
from sklearn.model_selection import train_test_split #导入测试训练分割模块
from sklearn.model_selection import cross_val_score #导入交叉验证类
import matplotlib.pyplot as plt #导入画线模块

wine = load_wine()
wine.data #特征数据集
wine.target #标签数据集

Xtrain, Xtest, Ytrain, Ytest = train_test_split(wine.data,wine.target,test_size=0.3) #规定测试和训练集
clf = DecisionTreeClassifier(random_state=0) #实例化决策回归树分类器
rfc = RandomForestClassifier(random_state=0) #实例化决策回归森林分类器
clf = clf.fit(Xtrain,Ytrain) #导入训练
rfc = rfc.fit(Xtrain,Ytrain)
score_c = clf.score(Xtest,Ytest) #对模型打分
score_r = rfc.score(Xtest,Ytest)
print("Single Tree:{}".format(score_c),"Random Forest:{}".format(score_r))

#画出随机森林和决策树在十组交叉验证下的效果对比
#交叉验证:是数据集划分为n分,依次取每一份做测试集,每n-1份做训练集,多次训练模型以观测模型稳定性的方法
rfc_l = []
clf_l = []
for i in range(10):
    rfc = RandomForestClassifier(n_estimators=25) #创建随机森林,树的数量是25
    rfc_s = cross_val_score(rfc,wine.data,wine.target,cv=10).mean() 
    #交叉验证,导入随机森林,数据特征,数据标签,cv表示交叉验证的次数,将特征分欸cv份,进行cv次循环
    rfc_l.append(rfc_s)
    clf = DecisionTreeClassifier() #在决策树中提样
    clf_s = cross_val_score(clf,wine.data,wine.target,cv=10).mean() #交叉验证决策树
    clf_l.append(clf_s)
plt.plot(range(1,11),rfc_l,label = "Random Forest") #画出1~10次的折线图,参数:y值的取值,标签叫随机森林
plt.plot(range(1,11),clf_l,label = "Decision Tree") #画出第二条线,决策树的线
plt.legend() #显示图例
plt.show() #显示图像
#是否有注意到,单个决策树的波动轨迹和随机森林一致?
#再次验证了我们之前提到的,单个决策树的准确率越高,随机森林的准确率也会越高

#n_estimators的学习曲线
superpa = [] #创建一个列表
for i in range(200): 
    rfc = RandomForestClassifier(n_estimators=i+1,n_jobs=-1)
    #n_estimators:森林中树木的数量。
    #n_jobs:要并行运行的作业的数量,-1表示使用所有处理器。
    rfc_s = cross_val_score(rfc,wine.data,wine.target,cv=10).mean() #交叉验证
    superpa.append(rfc_s) #往列表中添加元素
print(max(superpa),superpa.index(max(superpa))) 
#输出列表中最大的值,superpa.index():判断是否包含字串,如果包含子字符串返回开始的索引值
plt.figure(figsize=[20,5]) #画布尺寸
plt.plot(range(1,201),superpa) #画出图像
plt.show() #显示图像

import numpy as np #导入矩阵乘法类
from scipy.special import comb #导入组合类
np.array([comb(25,i)*(0.2**i)*((1-0.2)**(25-i)) for i in range(13,26)]).sum()
#np.array().sum():为将矩阵内的元素求和

rfc = RandomForestClassifier(n_estimators=25) #实例化一个随机森林类分类器
rfc = rfc.fit(Xtrain, Ytrain) #训练模型
rfc.score(Xtest,Ytest) #进行评分
rfc.feature_importances_ #是返回特征的重要性,打印每个属性的重要性的数值,只有数值,不知道数值对应的属性是什么
rfc.apply(Xtest) #返回每个样本被预测为的叶子的索引
rfc.predict(Xtest) #预测X的类或回归值
rfc.predict_proba(Xtest) #预测概率

#oob_score_指的是袋外得分
#有一些数据从来没有被随机挑选到,他们就被叫做“袋外数据”
#用oob_score_来导出没有被随机挑选到的袋外数据的测试结果,即精确度

Guess you like

Origin blog.csdn.net/m0_56501550/article/details/130504825