机器学习之特征工程

一、缺失值处理

  • 删除属性或者删除样本:如果大部分样本该属性都缺失买这个属性能提供的信息有限,可以选择放弃使用该维属性
  • 统计填充:对于缺失值没有歧视数值类型的属性,根据所有样本关于这维属性的统计值对其进行填充,如使用平均数,中位数,众数,最大值,最小值,具体选择哪种统计值需要具体问题具体分析
  • 统一填充:常用统一填充值有:“空”,“0”,“正无穷”,“负无穷”等
  • 预测/模型 填充:可以通过预测模型利用不存在缺失值的属性来预测缺失值,也就是先用预测模型把数据填充后再做进一步的工作,如统计,学习等。虽然这种方法比较复杂,但是最后得到的结果比较好

pandas中用fillna,sklearn中用imputer

pandas

df_train['Age'].fillna(value=df_train['Age'].mean())

sklearn

from sklearn.preprocessing import Imputer
imp = Imputer(missing_values='NaN',strategy='mean',axis=0)
age = imp.fit_transform(df_train[['Age']].values)

年收入: 商品推荐场景下填充平均值
行为时间点:填充众数
价格:商品匹配场景下填充平均值
人体寿命:人口估计场景下填充平均值
驾龄: 没有填写这项的用户可能没有车,为它填充为0比较合理
本科毕业时间:没有填写这一项的用户可能没有上大学,为它填写正无穷比较合理
婚姻状态:没有填写这一项的用户可能对自己隐私比较敏感,应单独设为一个分类,如已婚1,未婚0,未填-1

二 数值型特征

apply+numpy

log_age  =df_train['Age'].apply(lambda x:np.log(x))  把x转成了np.log(x)
df_train.loc[:,'log_age'] = log_age

preprocessing scaler

from sklearn.preprocessing import MinMaxScaler
mm_scaler =MinMaxScaler()
fare_trans = mm_scaler.fit_transform(df_train[['Fare']])
from  sklearn.preprocessing import StandardScaler
std_scaler = StandardScaler()
fare_std_trans = std_scaler.fit_transform(df_train[['Fare']])

高次特征与交叉特征

  • preprocessing.PolynaominFeatures
    将两个特征组成一个特征
from sklearn.preprocessing import PolynomialFeatures
ploy = PolynomialFeatures(degree=2)
df_train[['sibsp','Parch']].head()

poly_fea = poly.fit_transform(df_train[['sibsp','Parch']])

对于数值型的特征中:特征的属性是无序的,用独热编码、哑变量 比如说:性别,颜色,星期
对于数值型的特征中:特征的属性是有序,用标签编码,比如说:公司的成立时间,职位:

三、性能度量与评估方法

准确性:分类正确样本占用样本个数的比例。其中Ncorrect就是被分类正确的样本的个数
准确率:Accuracy=(15+(80-35))/100 =  60%
精确率:分类正确的正样本个数占分类器判断定为正样本的个数的比例。其中Nringt+表示分类正确的正样本的数量,Ncorrect+表示所有被为正样本的数量
 召回率:分类正确的正样本占真实正样本的比例,其中Night+表示分类正确的正样本的数量,Nreally+表示真实正样本的数量。
F1_score:是精确率和召回率的调和平均值
调和平均值:
from sklearn.metrics import accuracy_score
from sklearn.metrcis import recall_sorce
from sklearn.metrcis import f1_socre
y_pred = [0,1,2,3]
y_true = [0,1,2,3]
print(accuracy_score(y_true,y_pred))
print(precision_socre(y_true,y_pred,average='macro'))
print(recall_score(y_true,y_pred,averager='macro'))
prtin(f1_score(y_true,y_pred,average='macro'))

四、编码方式

  • 类类型: OneHot encoding/独热向量编码
    pandas get_dunmmies
    OneHotEncoder()
  • 一些属性是类别性而不是数值型,举一个简单的例子,由{红,绿,蓝}组成的颜色属性,最常用的方式是把方式把每个类型属性转换成二元属性,即从{0,1}中取一个值,因此基本上增加的属性等于相应的数目的类别,并且对于你数据集中每个实例只有一个是1(其他的为0),这就是独热编码方式
embarked_oht = pd.get_dummies(df_train[['Embarked']])

五、总结

1 那些机器学习算法不需要做归一化(Normalization)处理?

概率模型不需要归一化,因为她们不关心变量的值,因为她们不关心变量的值,而是关心变量的分布和变量之间的条件概率,如决策树,随机森林,随机森林rf。而像adaboost,svm,kr,knn,kmeans之类的最优化问题就需要归一化。

2 对于树形接口为什么不需要归一化

数值缩放,不影响分裂点的位置.因为第一步是按照特征值进行排序,排序的顺序不变,那么所属的分支以及分裂点就不会有不同,对于线性模型,比如LR,一个是(0,1),一个是(0,10000)的,这样运用梯度下降的时候,损失等高线是一个椭圆的形状,这样我想迭代到最优点,就需要很多迭代。但是如果进行了归一化,那么等高线就是圆形的,那么SGD就会往远点进行迭代,需要迭代的次数比较少。另外注意树模型是不能进行梯度下降,因为树模型是阶跃的,阶跃点是不可导的,并且求导没有意义,并且求导没有意义,所以树模型虚招最优点是通过虚招最优分裂点完成,从而不需要数据的归一化

3 处理不平衡数据

权重法是比较简单的方法,我们可以对训练集的每个类别加一个权重calss weight。如果该类别的样本数多,那么他的权重就低,反之则权重就搞。如果更细致点,我们还可以对每个权重sample weight,思路和类被权重一样,即样本数多的类别样本权重低,反之样本权重高

采样法常用的也有两种思路,一种是类别样本数多的样本做子采样,比如训练集A类别样本占90%,B样本占样本10%。那么我们可以对A类的样本子采样,知道子采样得到A类样本和B类别现有样本一致为止,这样我们就只用子采样的得到的A类样本数和B类样本数现有样本一起做训练集拟合模型,第二种思路对类别样本数少的样本做过采样,还是上面的例子,我们对B类别的样本做过采样,直到过采样得到的B类别样本数加上B类别原来样本一起和A类样本数一致

4 异常特征样本清洗

我们在实际项目中拿到的数据往往有不少异常数据,有时候不筛选出这些异常数据很可能让我们后面的数据分析模型很大的偏差。那么如果我们没有专业知识,如何筛选这些异常特征样本?常用的方法有两种

  • 第一种是聚类,比如我们可以用Kmeans聚类将训练样本分成若干个族,如果某一个族里的样本数很少,而且族质心和其他素有的族都很远,那么这个族里面的样本很
    多有可能是异常特征样本我们就可以将其从训练集过滤掉
  • 第二种是异常检测方法,主要是使用iForest或者One class SVM,使用异常点加测的机器学习算法来过滤所以的异常点

当然,某些筛选出来的异常样本师范真的是不需要的异常特征样本,最好懂业务的再确认一下防止我们将政策的样本过滤掉

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容

  • 数据处理 缺失值处理行数据缺失过多,用户区分度就会降低,列数据缺失过多会导致建模存在偏差fillna:填充缺失值;...
    郭彦超阅读 232评论 0 0
  • outline 概念 预处理 特征选择 降维 概念 数据集由数据对象组成,一个数据对象代表一个实体属性(attri...
    neo_ng阅读 2,428评论 0 29
  • 大部分上传的截图都挂了,大家见谅吧,也不影响学习的 什么是特征工程 书接上文,前文我们看到鸢尾花数据集张什么样子:...
    前行的乌龟阅读 639评论 0 2
  • 特征工程的定义,是对原始数据进行一系列工程处理,将其提炼为特征,作为输入以供算法和模型使用。 机器学习主要包含以下...
    阿牛02阅读 337评论 0 0
  • 一、特征处理 1.1 类别型特征类别型特征(Categorical Feature)主要是指性别(男、女)、血型(...
    骆旺达阅读 660评论 1 4