本文概要
- 假设随机森林
- 为什么要使用随机森林?
- 如何随机森林算法的工作?
- 随机森林中的应用
- 随机森林的优点
- 随机森林的缺点
- 随机森林算法的Python实现
正如其名,“随机森林是一个包含若干个给定数据集的各种子集决策树,并采取平均,以提高该数据集的预测准确度的分类。”而不是依靠一个决策树,随机森林从每棵树需要预测,并根据预测的多数票,并预测最终的输出。
树木在森林带来更高的精度和防止过度拟合的问题更大数量。
下面的图表说明了随机森林算法的工作:
文章图片
注:为了更好地理解随机森林算法,你应该有决策树算法的知识。假设随机森林由于随机森林合并多个树来预测类数据集的,有可能是一些决策树可以预测正确的输出,而其他人可能不会。但同时,所有的树木预测正确的输出。因此,下面是两个假设一个更好的随机森林分类:
- 应该有一些实际值数据集中的特征变量,这样的分类可以预测准确的结果,而不是推测的结果。
- 从每棵树的预测必须有很低的相关性。
- 与其他算法相比,它需要更少的训练时间。
- 它可以高精度地预测输出,即使对于大型数据集,它也可以高效地运行。
- 当大量数据丢失时,它也能保持准确性。
工作过程可以在下面的步骤和图进行说明:
第1步:从训练集随机选择K个数据点。
步骤2:构建与所选择的数据点(子集)相关联的判定树。
步骤3:选择数N决策树要构建。
步骤4:重复步骤1和2。
步骤5:对于新的数据点,找到每个决策树的预测,并指定新的数据指向赢得多数选票的类别。
该算法的工作可以通过下面的例子可以更好地理解:
例如:假设有一个包含多个水果图像的数据集。因此,该数据集是考虑到随机森林分类。该数据集分为亚群,给每个决策树。在训练阶段,每个决策树生成预测结果,当一个新的数据点出现,然后根据多数的结果,随机森林分类预测的最终决定。考虑下面的图片:
文章图片
随机森林中的应用主要有其中随机森林主要用于四个方面:
- 银行业:银行业大多采用这种算法对贷款风险的识别。
- 医药:有了这个算法的帮助下,疾病发展趋势和疾病的风险可以被识别。
- 土地用途:我们可以通过该算法确定的同类土地使用面积。
- 营销:营销趋势可以用这个算法来识别。
- 随机森林是能够执行分类和回归任务。
- 它能够处理大型数据集的高维数。
- 它增强了模型的准确性和防止过度拟合问题。
- 尽管随机森林可用于分类和回归任务,它是不是更适合回归任务。
实施步骤给出如下:
- 数据前处理步骤
- 拟合随机森林算法训练集
- 预测测试结果
- 结果的测试精度(混淆矩阵的创建)
- 可视化测试集的结果。
下面是用于预处理步骤的代码:
# importing libraries
import numpy as nm
import matplotlib.pyplot as mtp
import pandas as pd#importing datasets
data_set= pd.read_csv('user_data.csv')#Extracting Independent and dependent Variable
x= data_set.iloc[:,[2,3]].values
y= data_set.iloc[:,4].values# Splitting the dataset into training and test set.
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test= train_test_split(x,y,test_size= 0.25,random_state=0)#feature Scaling
from sklearn.preprocessing import StandardScaler
st_x= StandardScaler()
x_train= st_x.fit_transform(x_train)
x_test= st_x.transform(x_test)
在上面的代码中,我们已经预先处理的数据。当我们已加载的数据集,给出如下:
文章图片
2.配件随机森林算法训练集:
【机器学习随机森林算法】现在,我们将配合随机森林算法训练集。为了适应它,我们会从sklearn.ensemble库导入RandomForestClassifier类。该代码下面给出:
#Fitting Decision Tree classifier to the training set
from sklearn.ensemble import RandomForestClassifier
classifier= RandomForestClassifier(n_estimators= 10,criterion="entropy")
classifier.fit(x_train,y_train)
在上面的代码,所述分类对象采用以下参数:
- n_estimators =所需数量的随机森林树木。默认值是10,我们可以选择任何号码,但需要采取过度拟合问题的关心。
- 准则=它是分析分割的精度的函数。在这里,我们采取了“熵”的信息增益。
RandomForestClassifier(bootstrap=True,class_weight=None,criterion='entropy',max_depth=None,max_features='auto',max_leaf_nodes=None,min_impurity_decrease=0.0,min_impurity_split=None,min_samples_leaf=1,min_samples_split=2,min_weight_fraction_leaf=0.0,n_estimators=10,n_jobs=None,oob_score=False,random_state=None,verbose=0,warm_start=False)
3.预测测试集的结果
由于我们的模型拟合训练集,所以现在我们可以预测的测试结果。对于预测,我们将创建一个y_pred新的预测向量。下面是它的代码:
#Predicting the test set result
y_pred= classifier.predict(x_test)
输出:
预测向量给定为:
文章图片
通过检查上述预测矢量和测试集实向量,我们可以确定由分类做了不正确的预测。
4.创建混淆矩阵
现在,我们将创建混淆矩阵来确定正确的和不正确的预测。下面是它的代码:
#Creating the Confusion matrix
from sklearn.metrics import confusion_matrix
cm= confusion_matrix(y_test,y_pred)
输出:
文章图片
正如我们可以在上述矩阵看到的,有4 + 4 = 8个不正确的预测和64 + 28 = 92正确的预测。
5.可视化训练集结果
在这里,我们将可视化训练集的结果。以可视化的训练集中的结果,我们将绘制的随机森林分类的??图表。分类器将是或否预测谁已经购买或不购买的SUV车,因为我们在Logistic回归所做的用户。下面是它的代码:
from matplotlib.colors import ListedColormap
x_set,y_set = x_train,y_train
x1,x2 = nm.meshgrid(nm.arange(start = x_set[:,0].min() - 1,stop = x_set[:,0].max() + 1,step=0.01),nm.arange(start = x_set[:,1].min() - 1,stop = x_set[:,1].max() + 1,step = 0.01))
mtp.contourf(x1,x2,classifier.predict(nm.array([x1.ravel(),x2.ravel()]).T).reshape(x1.shape),alpha = 0.75,cmap = ListedColormap(('purple','green' )))
mtp.xlim(x1.min(),x1.max())
mtp.ylim(x2.min(),x2.max())
for i,j in enumerate(nm.unique(y_set)):
mtp.scatter(x_set[y_set == j,0],x_set[y_set == j,1],c = ListedColormap(('purple','green'))(i),label = j)
mtp.title('Random Forest Algorithm (Training set)')
mtp.xlabel('Age')
mtp.ylabel('Estimated Salary')
mtp.legend()
mtp.show()
输出:
文章图片
上面的影像是与训练集结果随机森林分类工作的可视化结果。这是非常相似的决策树分类。每个数据点对应于的user_data中的每个用户,紫和绿色区域是预测区域。紫色区域被划入谁没有购买SUV车的用户,绿色区域是谁购买了SUV的用户。
所以,在随机森林分类,我们已经采取的预言是或否购买的变量10棵树。该分类采取多数预测和提供的结果。
6.可视化测试集结果
现在,我们将可视化测试集的结果。下面是它的代码:
#Visulaizing the test set result
from matplotlib.colors import ListedColormap
x_set,y_set = x_test,y_test
x1,x2 = nm.meshgrid(nm.arange(start = x_set[:,0].min() - 1,stop = x_set[:,0].max() + 1,step=0.01),nm.arange(start = x_set[:,1].min() - 1,stop = x_set[:,1].max() + 1,step = 0.01))
mtp.contourf(x1,x2,classifier.predict(nm.array([x1.ravel(),x2.ravel()]).T).reshape(x1.shape),alpha = 0.75,cmap = ListedColormap(('purple','green' )))
mtp.xlim(x1.min(),x1.max())
mtp.ylim(x2.min(),x2.max())
for i,j in enumerate(nm.unique(y_set)):
mtp.scatter(x_set[y_set == j,0],x_set[y_set == j,1],c = ListedColormap(('purple','green'))(i),label = j)
mtp.title('Random Forest Algorithm(Test set)')
mtp.xlabel('Age')
mtp.ylabel('Estimated Salary')
mtp.legend()
mtp.show()
输出:
文章图片
上述图像是用于测试集可视化结果。我们可以检查是否有不正确的预测(8),而不过度拟合问题的最小数量。我们将通过改变分类树木的数量得到不同的结果。
推荐阅读
- 什么是数据科学(数据科学入门)
- 机器学习决策树分类算法
- 线性回归VS Logistic回归
- 机器学习的回归VS分类
- 朴素贝叶斯分类器
- 支持向量机(SVM)算法
- k近邻(KNN)算法
- Logistic回归机器学习
- 机器学习的分类算法