ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

数据分析与挖掘3——特征工程

2021-09-21 16:00:08  阅读:267  来源: 互联网

标签:数据分析 fit 特征 transform train 挖掘 import data sklearn


数据和特征决定了机器学习得上限,而模型和算法只是逼近这个上线

1.数据预处理

  1. 数据采集
  2. 数据清洗:去除脏数据
  3. 数据采样:数据存在不平衡得情况下使用,有上采样和下采样之分;正样本>负样本,且数据量大,采用下采样;正样本>负样本,数据量不大,采用上采样;或者修改损失函数设置样本权重

2. 特征处理

  1. 标准化:使得经过处理后的数据符合标准的正态分布。
#标准化
from sklearn.preprocessing import StandardScaler
ss=StandardScaler()
data=ss.fit_transform(data)
  1. 归一化:将样本的特征值转换到同一量纲下,消除特征之间不同量纲的影响,区间缩放是归一化的一种。
from sklearn.preprocessing import Normalizer
sn=Normalizer()
data_normalizer=sn.fit_transform(data)
#比较适用于数据较集中的情况

两者区别:

  • 归一化容易受极端最大值和最小值的影响,比较适用于数值比较集中的情况;
  • 数据中如果存在异常值和较多的噪声,使用标准化;
  • SVM、KNN、PCA等模型必须进行标准化或归一化;
  • 两者都可以消除量纲的影响;
  • 提高梯度下降法求解最优解的速度;
  1. 定量数据二值化:将数值型数据通过设置阈值的方式进行二值化
from sklearn.preprocessing import Binarizer
b=Binarizer(threshold=3)#设置阈值,大于阈值的设为1,小于阈值的设为0
b.fit_transform(data)

运行结果:
在这里插入图片描述

  1. 定性数据哑编码:将类别型数据转换为数值型数据,如:OneHotEncoder
from sklearn.preprocessing import OneHotEncoder
oh=OneHotEncoder()
oh.fit_transform(target.reshape((-1,1)))

运行结果:
在这里插入图片描述
7. 缺失值处理
数据分析与挖掘2——数据预处理
8. 数据转换

3.特征降维

3.1. 特征选择

在这里插入图片描述

方差选择特征:计算各个特征的方差,通过设置方差的阈值训责特征

data_train_columns=[col for col in data_train.columns if col not in ['target']]
# 方差筛选特征,设置方差阈值为1
from sklearn.feature_selection import VarianceThreshold
vt=VarianceThreshold(threshold=1)
data_vt=vt.fit_transform(data_train[data_train_columns])
data_vt=pd.DataFrame(data_vt)

相关系数: 计算各个特征对目标值的相关系数(皮尔逊相关系数)

#相关系数法筛选特征,选择特征个数
from sklearn.feature_selection import SelectKBest
from scipy.stats import pearsonr
skb=SelectKBest(lambda X,Y:np.array(list(map(lambda x:pearsonr(x,Y),X.T))).T[0],k=10)
data_skb=skb.fit_transform(data_train[data_train_columns],data_train['target'])

卡方检验:计算类别型特征和类别型target之间的相关性.卡方检验

from sklearn.feature_selection import chi2
SelectKBest(chi2,k=2).fit_transform(x,y)

最大信息系数法:计算类别型特征和类别型target之间的相关性

from minepy import MINE
def mic(x,y):
	m=MINE()
	m.compute_score(x,y)
	return (m.mic(),0.5)
SelectKBest(lambda X,Y:np.array(list(map(lambda x:mic(x,Y),X.T))).T[0],k=10).fit_transform(train_data,train_target)

递归消除特征法:RFE 算法通过增加或移除特定特征变量获得能最大化模型性能的最优组合变量。

#RFE递归消除法
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
rfe=RFE(estimator=LogisticRegression(multi_class='auto',
                                    solver='lbfgs',
                    				max_iter=500),n_features_to_select=10)
#estimator为基模型,为逻辑回归模型,用于分类
#solver:几种优化方法。小数据集中,liblinear是一个好选择,sag和saga对大数据集更快;多类别问题中,除了liblinear其它四种算法都可以使用;newton-cg,lbfgs和sag仅能使用L2惩罚项,liblinear和saga使用L1惩罚项。
#max_iter:int类型,默认为‘100’,仅适用于newton-cg, sag和lbfgs算法;表示算法收敛的最大次数。
#n_features_to_select=10为选择的特征的个数
data_rfe=rfe.fit_transform(data_train[data_train_columns],data_train['target'])#data_train['target']为类别型标签

基于模型的特征选择

  1. 基于惩罚项的特征选择
#基于惩罚项的特征选择算法
from sklearn.feature_selection import SelectFromModel
from sklearn.linear_model import LogisticRegression
sfm=SelectFromModel(LogisticRegression(penalty='l2',C=0.1,solver='lbfgs',multi_class='auto'))
#solver为优化算法,lbfgs优化算法仅支持l2;penalty为惩罚项,惩罚项是用来添加参数避免过拟合,可以理解为对当前训练样本的惩罚,用以提高函数的泛化能力;C为正则化系数的倒数,值越小,表示越强的正则化
data_sfm=sfm.fit_transform(data,target)
data_sfm=pd.DataFrame(data_sfm)
data_sfm
  1. 基于树模型的特征选择算法
#基于树模型的特征选择
from sklearn.feature_selection import SelectFromModel
from sklearn.ensemble import GradientBoostingClassifier
sfmGBDT=SelectFromModel(GradientBoostingClassifier())
data_sfmGBDT=sfmGBDT.fit_transform(data,target)
data_sfm=pd.DataFrame(data_sfm)
data_sfm

3.2 线性降维

标签:数据分析,fit,特征,transform,train,挖掘,import,data,sklearn
来源: https://blog.csdn.net/qq_38936560/article/details/120388656

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有