机器学习:随机森林回归分类器
%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_来导出没有被随机挑选到的袋外数据的测试结果,即精确度
上一篇:
通过多线程提高代码的执行效率例子
下一篇:
Java反射获取类,方法