随机森林
1、集成学习方法
集成学习通过建立几个模型组合来解决单一预测问题
工作原理:生成多个分类器/模型,各自独立地学习和做出预测
这些预测最后结合成单预测,因此优于任何一个单分类做出的预测
2、随机森林
包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数而定
3、随机森林算法
单个树建立
(1)随机在N个样本中选择一个样本,重复N次,样本有可能重复
(2)随机在M个特征中选出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}
"""