仅作为学习记录
例子:泰坦尼克号幸存者预测
1.导入库和数据集
2.探索数据,数据预处理
data.info()
data.head()#显示前xx行,括号不写默认前5行
筛选特征
#筛选特征
#axis=0,1 0是行 1是列
data.drop(['Name','Cabin'],inplace=True,axis=1)#可以一次性删除多列,inplace=True:新表覆盖旧表
#或者data=data.drop(['Name','Cabin'],inplace=False,axis=1)
处理缺失值
#处理缺失值
data["Age"]=data["Age"].fillna(data["Age"].mean())
#na是缺失值,fillna为填补缺失值,年龄缺少的不多,可以用平均年龄填补
#,有时候直接用fillna(0),或者中值什么什么的,甚至可以用算法填补
data.dropna()
#删掉有缺失值的行,axis=0,1 0是行 1是列,默认是行
决策树处理不了文字,把文字的转化为数字
labels=data["Embarked"].unique().tolist()
data["Embarked"]=data["Embarked"].apply(lambdax:labels.index(x))
#没有关联的可以转化
#apply:在这一列上执行apply括号里的操作
python提示最好不要用data[列名],用loc,iloc
data.loc[:,“Sex”]==data[“Sex”]
分训练集测试集并处理
获取x和y
解析:
返回为True的列都取出来
再同样的方法处理y
若进行随机处理后索引变乱,最好是恢复索引的顺序
reset_index(drop=true)#也可以重置索引
跑模型
跑一次
用交叉验证试试
效果都不大,进行调参,先试试max_depth
循环,试试多少层的分数最高
画线作图,让x轴显示1到10
结果展示
发现3那一点效果比较好
修改criterion参数为entropy信息熵
entropy信息熵一般为欠拟合时候使用
效果更好了
网格搜索
可以同时调整多个参数,本质是枚举技术
计算量非常大,时间比较长
min_impurity_decrease不用网格搜索一般用不到
给min_impurity_decrease取值比较麻烦,用np.linspace生成等差数列
实例化GridSearchCV参数:
clf:模型
parameters:有着参数和参数取值范围的列表的字典
cv:交叉验证次数
GS.best_params_#返回最佳组合
GS.best_score_#返回最佳组合下的模型的评判标准
网格搜索也有缺点,它无法舍弃掉那些参数。
网格搜索出来的不一定比我们自己调试的高