前情回顾机器学习100天|Day1数据预处理100天完成机器学习|Day2简单线性回归分析100天完成机器学习|Day3多元线性回归完成100天机器学习|Day4-6逻辑回归100天搞定机器学习|Day7K-NN100天搞定机器学习|Day8逻辑回归的数学原理100天搞定机器学习|Day9-12支持向量机100days获得机器学习|Day11实现KNN10010天获得机器学习|Day13-14SVM实现100天获得机器学习|Day15朴素贝叶斯100天获得机器学习|Day16通过内核技能实现SVM100天获得机器学习|Day17-18神奇逻辑回归100天搞定机器学习|Day19-20加州理工公开课:机器学习与数据挖掘100天搞定机器学习|Day21美汤100天搞定机器学习|Day22为什么机器可以学习?100天搞定机器学习|Day23-25决策树与Python实现100天搞定机器学习|Day26-29线性代数精髓100天搞定机器学习|Day30-32微积分精髓前言:随机森林是一种非常灵活的机器学习方法,从市场营销到健康保险都有很多应用。它可用于营销,以模拟客户获取和保留或预测患者疾病风险和易感性。随机森林可用于分类和回归问题,可以处理大量特征,并且可以帮助估计用于建模数据的变量的重要性。.是一种比较新的机器学习策略(诞生于1990年代的贝尔实验室),可以任意使用,属于机器学习中的集成学习范畴1.1集成学习集成学习是多个模型的组合至解决单个预测问题,其原理是生成多个分类器模型,独立学习并进行预测,这些预测最终组合起来得到预测结果,因此结果与单个分类器的结果相同或更好。随机森林是一种集成学习的一个分支,因为它依赖于决策树的集成。1.2随机决策树我们知道随机森林聚合了其他模型,但到底是哪个模型呢?顾名思义,随机森林聚合分类(或回归)树。决策树是一系列决策的组合,可用于对数据集中的观察结果进行分类。1.3随机森林引入的随机森林算法会自动创建随机的决策树种群。由于这些树是随机生成的,因此它们中的大多数(甚至99.9%)对于解决您的分类或回归问题没有意义。1.4投票那么产生数以万计的坏模型有什么好处呢?好吧,它真的没有。但有用的是,随之生成了一些非常好的决策树。当您进行预测时,新的观察结果沿着决策树向下移动并被分配一个预测值或标签。一旦森林中的每棵树都被赋予了预测或标签,所有预测就会被加在一起,所有树的投票作为最终预测返回。简单来说,99.9%的不相关树做出涵盖所有情况的预测,并且这些预测会相互抵消。少数优秀树的预测结果会脱颖而出,从而产生较好的预测结果。2为什么使用它随机森林是机器学习方法中的Leatherman。你几乎可以向它扔任何东西。它在inferencemap的估计上做得特别好,所以它不需要像SVM医生那么多的调优参数(这对时间紧迫的朋友来说非常好)。2.1映射示例无需刻意的手动数据转换即可学习随机森林。以函数f(x)=log(x)为例。我们将使用Python在Yhat自己的交互环境Rodeo中生成分析数据。您可以在此处下载Rodeo的Mac、Windows和Linux安装文件。首先,让我们生成数据并添加噪声。得到如下结果:如果我们建立一个基本的线性模型来用x预测y,我们需要画一条直线,这条直线必须被视为平分log(x)函数。而如果我们使用随机森林算法,它可以更好地逼近log(x)曲线,使其看起来更像实际函数。当然,您也可以说随机森林对log(x)函数有点过拟合。无论如何,这表明随机森林不仅限于线性问题。3使用的方法3.1特征选择随机森林的最佳用例之一是特征选择。尝试许多决策树变量的副产品是您可以检查变量在每棵树中的表现是最好还是最差。当一些树使用变量而其他树不使用变量时,您可以比较信息的损失或增益。实施良好的随机森林工具可以为您完成这项工作,因此您需要做的就是查看该方法或参数。在下面的示例中,我们试图了解在区分红葡萄酒和白葡萄酒时哪些变量最重要。3.2分类随机森林也擅长分类问题。它可以用来对多个可能的物体类别进行预测,也可以输出调整后的概率。您需要注意的一件事是过度拟合。随机森林容易过度拟合,尤其是当数据集相对较小时。当您的模型在测试集上做出“太好”的预测时,请保持警惕。避免过拟合的一种方法是只使用模型中的相关特征,比如使用前面提到的特征选择。3.3回归随机森林也可以用于回归问题。我发现,与其他方法不同,随机森林非常擅长分类变量或分类变量和连续变量的混合。4一个简单的Python示例#Importlibraryimportnumpyasnpiimportmatplotlib.pyplotaspltimportpandasaspd#Importdatasetdataset=pd.read_csv('Social_Network_Ads.csv')X=dataset.iloc[:,[2,3]]。valuesy=dataset.iloc[:,4].values#将数据集拆分为训练集和测试集fromsklearn.model_selectionimporttrain_test_splitX_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.25,random_state=0)#Featurescalingfromsklearn.preprocessingimportStandardScalersc=StandardScaler()X_train=sc.fit_transform(X_train)X_test=sc.transform(X_test)#调试训练集的随机森林fromsklearn.ensembleimportRandomForestClassifierclassifier=RandomForestClassifier(n_estimators=10,criterion='entropy',random_state=0)classifier.fit(X_train,y_train)#预测测试集结果y_pred=classifier.predict(X_test)#生成混淆矩阵,也叫误差矩阵fromsklearn.metricsimportconfusion_matrixcm=confusion_matrix(y_test,y_pred)#视觉ze训练集的结果frommatplotlib.colorsimportListedColormapX_set,y_set=X_train,y_trainX1,X2=np.meshgrid(np.arange(start=X_set[:,0].min()-1,stop=X_set[:,0].max()+1,step=0.01),np.arange(start=X_set[:,1].min()-1,停止=X_set[:,1].max()+1,step=0.01))plt.contourf(X1,X2,classifier.predict(np.array([X1.ravel(),X2.ravel()])。T).reshape(X1.shape),alpha=0.75,cmap=ListedColormap(('red','green')))plt.xlim(X1.min(),X1.max())plt.ylim(X2.min(),X2.max())fori,jinenumerate(np.unique(y_set)):plt.scatter(X_set[y_set==j,0],X_set[y_set==j,1],c=ListedColormap(('red','green'))(i),label=j)plt.title('随机森林分类(训练集)')plt.xlabel('年龄')plt.ylabel('估计Salary')plt.legend()plt.show()#将测试集合结果可视化frommatplotlib.colorsimportListedColormapX_set,y_set=X_test,y_testX1,X2=np.meshgrid(np.arange(start=X_set[:,0].min()-1,stop=X_set[:,0].max()+1,step=0.01),np.arange(start=X_set[:,1].min()-1,stop=X_set[:,1].max()+1,步骤=0.01))plt.contourf(X1,X2,classifier.predict(np.array([X1.ravel(),X2.ravel()]).T).reshape(X1.shape),alpha=0.75,cmap=ListedColormap(('red','green')))plt.xlim(X1.min(),X1.max())plt.ylim(X2.min(),X2.max())fori,jin枚举(np.unique(y_set)):plt.scatter(X_set[y_set==j,0],X_set[y_set==j,1],c=ListedColormap(('red','green'))(i),label=j)plt.title('随机森林分类(测试集)')plt.xlabel('年龄')plt.ylabel('预估工资')plt.legend()plt.show()
