集成学习:建立几个模型组合来解决某一预测问题,生成多个分类器。
随机森林:多个决策树的分类器,输出结果选择占比最大的结果
单个树建立过程:1.随机在N个样本种选择一个样本,重复N次,样本可能重复。
2.随机在M个特征中选出m个特征
假设10棵决策树,样本、特征大多不一样
二、决策树代码
import pandas as pd #数据分析
import numpy as np #科学计算
from sklearn.feature_extraction import DictVectorizer
from sklearn.model_selection import train_test_split, GridSearchCV #数据分隔和网格搜索
from sklearn.tree import DecisionTreeClassifier, export_graphviz #决策树的可视化
from sklearn.ensemble import RandomForestClassifier
def decison():
"""
决策树对泰坦尼克号生存人数预测
:return:None
"""
#获取数据
titan = pd.read_csv("train.csv") #根据自己的路径定,我是把数据集从kaggle里下载到python的文件夹里面
#将乘客的位置、年龄、性别做为特征列
x = titan[['Pclass', 'Age', 'Sex']]
#是否生存作为标签类
y = titan['Survived']
pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)
#缺失值处理
x['Age'].fillna(x['Age'].mean(), inplace=True)
print(x)
#分隔数据集
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25)
#特征工程 特征中是类别的信息要进行one-hot编码,还要把特征转换成字典形式
dict = DictVectorizer(sparse=False)
x_train = dict.fit_transform(x_train.to_dict(orient="records"))
x_test = dict.fit_transform(x_test.to_dict(orient="records"))
print(dict.get_feature_names() )
#用决策树进行预测
# dec = DecisionTreeClassifier()
# dec.fit(x_train, y_train)
# print("预测准确率", print(dec.score(x_test, y_test)))
#
# #决策树的结构可视化
# export_graphviz(dec, out_file="./tree.dot", feature_names= ['年龄', 'Pclass', '女性', '男性'])
#
# #将dot二进制文件,转化成可视化图片
#随机森林预测
rf = RandomForestClassifier()
param = {"n_estimators": [120, 200, 300, 500, 800, 1200], "max_depth": [5, 8, 15, 25, 30]} #每两两参数进行组合
#网格搜索与交叉验证,选择最佳参数
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_ )
return None
if __name__ =="__main__":
decison()
随机森林有点:
1.能够有效地运行在大数据集上
2.能够处理高维度的特征,而不需要降维
3.评估各个特征在分类问题上的重要性