Data Preprocessing Note

数据预处理

可以先把数据读成二维列表的形式然后用pd.DataFrame(data),也可以用pd的csv相关东西直接读.
注意针对特征的预处理一定要记得从一维升上去
数据预处理需要在sklearn.preprocessing 中对相关的内容进行import

Scaler

线性变换归一化(normalization):

  • 不涉及梯度距离,需要压缩数据
  • 实例化MinMaxScaler类

以线性投影的形式把这一个数据项变为[0,1]

for \qquad x \in S \\ x' = \frac {x-min(S)} {max(S)-min(S)}

scaler = MinMaxScaler()
scaler = scaler.fit(data)
result = scaler.transform(data)
result
  • 参数feature_range可以用来调节间距,默认是[0,1].
scaler = MinMaxScaler(feature_range = [5,10])
result = scaler.fit_transform(data)
###这个方法一行之后可以进行训练与导出
result

逆转还原数据

scaler.inverse_transform(result)
  • fit因数据量太大报错就改成partial_fitI()使用方法类似

numpy实现:

X = np.array([],[],[])

X_nor  =(X - X.min(axis = 0))/ (X.max(axis = 0) - X.min(axis = 0))

标准化(Standardization)

  • 常用
  • 构造枢纽变量,把数据调整成服从\mu = 0, \sigma = 1的分布的变量

x' = \frac{x-\mu}{\sigma}

scaler = StandardScaler()
scaler.fit(data)

scaler.mean_
scaler.var_

x_std = scaler.transform(data)

x_std.mean()
x_std.std()

最大绝对值

for \qquad x \in S \\ x' = \frac {|x|} {max(S)}

适用于点比较稀疏的情况
MaxAbsScaler被用于绝对值缩放,通过特征里的数据除以绝对值最大的数值的绝对值压缩数据到[-1,1]之间,好处是不会破坏数据中0的个数这样的信息,这样的信息被称为稀疏性.

无量纲化

RoubustScaler被用于无量纲化,用来中心化.
适用于有一些离群点使得均值方差偏大的情况

Normalizer将样本独立缩放到单位范数,一般用于密集数组或者稀疏矩阵

PowerTranformer使得数据接近正态分布
但注意输入数据要恒为正

QuantileTranformer使用百分数转换特征,缩小边缘异常值和非异常值的距离

KernelCenterer:将X用和函数映射到希尔伯特空间然后进行中心化

缺失值

sklearn.impute

注意到可以用pd.read_csv(path)直接在pandas进行处理,其中index_col是说ID那一列,可以省略展示

探索数据data.info()

SimpleImputer()

参数:

  • missing_values默认空值np.nan
  • strategy填补的策略
  • mean均值填补
  • median中位数填补
  • most_frequent众数填补
  • constant用另一个参数fill_value的取值填补
  • fill_value:strategy = constant的时候填补值
  • copy默认True,创建一个特征矩阵的副本

先取出数据的某一列,然后对其进行修改

Age = data.loc[:,'age'].values.reshape(-1,1)

imp.mean = SimpleImputer()
imp_mean  =imp_mean.fit_tranform(Age)

或者用pandas

data_.loc[:,'Age']=data_.loc[:,'Age].fillna(data_.loc[:,'Age'].median())
data_.dropna(axis = 0,inplace = True)
#axis = 0删行 inplace:是否在原数据集修改

编码

LabelEncoder

preprocessing.LabelEncoder

from sklearn.preprocessing import LabelEncoder
y = data.iloc[:,-1]
#因为这里输入标签,所以只要一维就够了

过程

le = LabelEncoder()
le = le.fit(y)
label = le.tranform(y)
le.classes_
#可以发现这里可以搞定多分类问题
#这里fit_transform()和inverse_tranform(label)依然可以使用

简要写法

from sklearn.preprocessing import LabelEncoder
data.iloc[:,-1] = LabelEncoder().fit_tranform(data.iloc[:,-1])

OrdinalEncoder

data_ = data.copy()
data_.head()
OrdinalEncoder().fit(data_.iloc[:,1:-1]).categories_#所有行从索引为1的列取到索引为-2的列
data_iloc[:,1:-1]=OrdinalEncoder().fit_tranform(data_.iloc[:,1:-1])
data_.head()

OneHotEncoder

变量类型

  • 名义变量(区别不同)
  • 序数变量(区别偏序)
  • 有距变量(距离意义)
  • 比率变量(比也有意)

名义变量可以用OneHotEncoder

enc  =OneHotEncoder(categories = 'auto').fit(X)
result = enc.transform(X).toarray()
enc.get_feature_names()

一步到位

OnHotEncoder(categories  ='auto).fit_transform(X).toarray()

OneHot之后的合并

newdata = pd.concat([data,pd,DataFrame(result)],axis =1)
newdata.drop(['Sex','Embarked'],axis=1,inplace = True)
newdata.columns = ['','',...]

二值化和分段

Binarizer

data_2 = data.copy()
from sklearn.preprocessing import Binarizer
X = data_2.iloc[:,0].values.reshape(-1,1)
tranformer = Binarizer(threshold = 30).fit_tranform(X)

KBinsDiscretizer

  • n_bins :特征中分箱的个数,默认5
  • encode:编码方式,默认onehot
  • onehot:哑变量,
  • ordinal:每个箱被编码成一个整数
  • onehot-dense:哑变量,返回密集数组
  • strategy:定义箱宽的方式,默认quantile
  • uniform:等宽分箱
  • quantile:等位分箱
  • kmeans:聚类分箱
est = KBinsDiscretizer(n_bins = 3,encoder = 'ordinal',strategy = 'uniform')
est.fit_transform(X)

参考内容:
【机器学习】菜菜的sklearn课堂【全85集】Python进阶

侵权请联系删除

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