特征工程可用的一些方法
-
数据之间存在共线性,指数据之间的相关系数过高,会使模型失真。在建立模型时要尽量避免共线性
-
利用相关系数(共线性)可以将部分影响模型准确性的特征剔除,相关系数越大,共线性越强。
-
同样利用方差也可以筛选出影响模型准确性的特征,方差越小,说明特征中的数据的差别越小,不利于分类,故应将方差小的数据剔除。但要根据实际的情况,比如说一个特征中只有两类数值0和1,方差很小,但是特征是天气是否下雨,是一种很明显的分类,这种情况就不能直接删除了。
-
对于连续型数据,可以查看它的分布,我们更希望数据能够呈现为正太分布的状况,但是若出现偏尾,可以利用对数变化让数据更加贴近正太分布。
-
pd.melt() ,可以将多列数据汇总为一列,参数分别为 原始数据,第一列数据名,第二列数据名,第三列数据名,第二列数据会将所有列名汇总,第三列会将所有列的值进行汇总。进行汇总处理后翻方便可视化数据分布情况
pd.melt(data,id_vars="",var_name="",value_name='')
#sns.swarmplot配合使用可以清晰看数据分布,如下例子
sns.swarmplot(x="features", y="value", hue="diagnosis", data=data)
如下图示例:可以清晰的看到0-1的分布,一些特征的0-1分布更加明显,更有利于我们利用特征进行分类。
网格搜索和交叉验证
- 网格搜索: 用简答的话来说就是你手动的给出一个模型中你想要改动的所用的参数,程序自动的帮你使用穷举法来将所用的参数都运行一遍,得到最好的参数
- 交叉验证: 通俗的讲就是为了避免一份数据中有好有坏的数据,将我们传入的数据分割,每一次都从测试集中取出一分部去进行测试,最终在多次分割的测试中取得一个比较好的结果。
from sklearn.model_selection import GridSearchCV #导入网格搜索模块
GS = GridSearchCV(estimator,param_grid,scoring,cv,verbose, refit)
#estimator: 传入学习器
#param_grid: 需要最优化的参数的取值,值为字典或者列表,传入列表,让模型自己获取最优选择
#scoring: 模型评价标准,用均方误差或是AUC来衡量模型得分
#cv:交叉验证参数,进行机几指叉验证,传入一个数值
#verbose: 日志冗长度,0:不输出训练过程,1:偶尔输出,>1:对每个子模型都输出
# refit: 默认为True,程序将会以交叉验证训练集得到的最佳参数,重新对所有可用的训练集与开发集进行,作为最终用于性能评估的最佳模型参数。即在搜索参数结束后,用最佳参数结果再次fit一遍全部数据集。
GS.fit(x,y) #训练模型
print(grid.best_params_) #返回最优参数组合
print(grid.best_score_) #返回最优的模型评分
print(grid.cv_results_) #返回所有数据的得分和排名