随机森林
1、集成学习方法
集成学习通过建立几个模型组合来解决单一预测问题
工作原理:生成多个分类器/模型,各自独立地学习和做出预测
这些预测最后结合成单预测,因此优于任何一个单分类做出的预测
2、随机森林
包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数而定
3、随机森林算法
单个树建立
(1)随机在N个样本中选择一个样本,重复N次,样本有可能重复
(2)随机在M个特征中选出m个特征 m<
建立多棵树,样本,特征大多不一样
4、随机有放回抽样 bootstrap抽样
随机:避免每棵树都一样
有放回:每棵树和其他树有交集
5、参数调优
树木数量:120, 200, 300, 500, 800, 1200
最大深度:5, 8, 15, 25 ,30
6、随机森林的优点
在当前所有算法中,具有极好的准确率
能够有效地运行在大数据集上
能够处理具有高纬特征的输入样本,而且不需要降维
能够评估各个特征在分类问题上的重要性
代码示例
import pandas as pd from sklearn.feature_extraction import DictVectorizer from sklearn.model_selection import train_test_split, GridSearchCV from sklearn.ensemble import RandomForestClassifier # 读取数据 train = pd.read_csv("source/train.csv") # 选取数据集和目标集 data = train[["Pclass", "Sex", "Age"]] target = train["Survived"] # 缺失值处理 pd.set_option('mode.chained_assignment', None) data["Age"].fillna(data["Age"].mean(), inplace=True) data["Pclass"].replace(1, "low", inplace=True) data["Pclass"].replace(2, "middle", inplace=True) data["Pclass"].replace(3, "high", inplace=True) # 拆分数据集成训练集和测试集 X_train, X_test, y_train, y_test = train_test_split( data, target, test_size=0.25) # 特征工程,类别-> One-Hot编码 dct = DictVectorizer(sparse=False) X_train = dct.fit_transform(X_train.to_dict(orient="records")) X_test = dct.transform(X_test.to_dict(orient="records")) print(dct.get_feature_names()) # 随机森林预测 超参数调优 rf = RandomForestClassifier() # 网格搜索与交叉验证 params = { "n_estimators": [10, 60, 100, 120, 150, 200], "max_depth": [3, 5, 8, 15, 25, 30] } gs = GridSearchCV(rf, params, cv=2) gs.fit(X_train, y_train) print(gs.score(X_test, y_test)) print(gs.best_params_) """ 0.8251121076233184 {'max_depth': 3, 'n_estimators': 60} """