编程语言
首页 > 编程语言> > 分类算法之随机森林

分类算法之随机森林

作者:互联网

一、集成学习方法之随机森林

  集成学习通过建立几个模型组合来解决单一模型预测的问题。它的工作原理是生成多个分类器/模型,各自独立地学习和作出预测。这些预测最后结合成单预测,因此优于任何一个单分类的做出预测。

1、什么是随机森林

  随机森林是一个包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数而定。假设你训练了n棵树,其中有n-2棵树的结果类别是1,2棵树的结果的类别是2,那么最后的类别结果就是1。

2、随机森林创建流程

在创建随机森林之前,我们需要先知道随机森林中单棵决策树的创建流程:

可以以这种方式创建多棵树,显然每棵树的样本和特征大多不一样。

  值得注意的是上面的抽样是:有放回的抽样,如果不是有放回的抽样,这样每棵树的训练样本都是不同,之间也没有交集,也就是说每棵树训练出来都是有很大的差异的;而随机森林最后分类取决于多棵树的投票表决。

二、集成学习API

1、class sklearn.ensemble.RandomForestClassifier(n_estimators=10, criterion=’gini’, max_depth=None, bootstrap=True, random_state=None)

上述就是随机森林的分类器,其中:

2、实例

import pandas as pd
from sklearn.model_selection import train_test_split,GridSearchCV
from sklearn.feature_extraction import DictVectorizer
from sklearn.ensemble import RandomForestClassifier



def decision():
    """
    决策树对泰坦尼克号乘客进行生死预测
    :return: None
    """
    # 读取数据
    data = pd.read_csv("./data/决策树数据/data.csv")

    # 选取特征值、目标值
    x = data[['pclass', 'age', 'sex']]
    y = data['survived']

    # 处理缺失值
    x['age'].fillna(x['age'].mean(), inplace=True)
    print(x)
    """
     pclass        age     sex
      1st  29.000000  female
      1st   2.000000  female
    ...
    """
    # 分割数据集为训练集和测试集
    x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25)

    # 特征工程,pclass与sex都是非数字的值,所以需要将其值得类别进行one-hot编码,使用字典抽取,age值不变
    dict = DictVectorizer(sparse=False)
    x_train = dict.fit_transform(x_train.to_dict(orient='records'))
    x_test = dict.transform(x_test.to_dict(orient='records'))
    print(dict.get_feature_names())  # ['age', 'pclass=1st', 'pclass=2nd', 'pclass=3rd', 'sex=female', 'sex=male']
    print(x_train)
    """
    [[32.          0.          0.          1.          0.          1.        ]
      ...
     [58.          1.          0.          0.          1.          0.        ]
     [35.          0.          1.          0.          0.          1.        ]
     [31.19418104  0.          0.          1.          0.          1.        ]]

    """
    # 用随机森林进行预测(超参数调优)
    rf = RandomForestClassifier()

    param = {"n_estimators":[120, 200, 300, 500],"max_depth":[5, 8, 15]}
    # 网格搜索与交叉验证
    gc = GridSearchCV(rf,param_grid=param,cv=2)
    gc.fit(x_train,y_train)

    # 准确率
    print(gc.score(x_test,y_test))

    #参数模型
    print(gc.best_params_)
    """
    {'max_depth': 5, 'n_estimators': 300}
    """

if __name__ == '__main__':
    decision()

随机森林几乎没有什么缺点,它有以下的优点:

 

标签:分类,pclass,算法,train,dict,随机,test,森林
来源: https://www.cnblogs.com/shenjianping/p/13171037.html