100天机器学习day1之数据预处理

 大家好 我是小k 入手机器学习也快一个月了 接触到了很多关于机器学习的知识 但大多都只是停留在认知阶段 从今天起 想逐步的更加深层次的了解学习机器学习 我会不定时的在平台上发一些学习到自认为有用的知识和大家分享(模板内容参照Avik Jain) 今天简单和大家谈谈数据预处理部分

第一步:导入库

import numpy as np
import pandas as pd

第二步:加载数据集

这里我选择的数据集是在DC竞赛平台上租金预测新手赛的训练集 链接如下https://js.dclab.run/v2/cmptDetail.html?id=361

data = pd.read_csv(r'C:\Users\admin\Desktop\train.csv')
print(data.head())#审查数据集前五行

运行结果如下:
   ID     位置  出租方式     区  卧室数量  ...  时间  楼层  装修情况         距离      Label
0   0  118.0   NaN  11.0     1  ...   1   2   NaN  76.416667   5.602716
1   1  100.0   NaN  10.0     1  ...   1   1   NaN  70.916667  16.977929
2   2  130.0   NaN  12.0     2  ...   1   0   NaN  57.250000   8.998302
3   3   90.0   NaN   7.0     3  ...   1   2   NaN  65.833333   5.602716
4   4   31.0   NaN   3.0     2  ...   1   0   NaN        NaN   7.300509




我们不难发现 在这些数据里面存在一些'NaN' 在这里面意思是空值 意思就是说丢失了 如果我们要对数据进行训练的话 那么就得先对他们进行处理 这也是数据预处理的基本处理

第三步:分类object类型 

观察上列数据 我们可以发现 有些数据如房屋朝向它的表示不会是以int型,我们都知道计算机只认识数字 他可不认识什么中国汉字 所以我们在这里首先要做的是先把字符串类型和数值类型的特征进行分离

number_columns = [col for col in data.columns if data[col].dtype!='object']
category_columns = [col for col in data.columns if data[col].dtype =='object']

第四步:对object型进行转换

在这里我用的是LabelEncoder()方法 很简单 只需要几行代码

from sklearn.preprocessing import LabelEncoder #导入数据处理所必须的库
le = LabelEncoder()
for col in category_columns:
    data[col] = le.fit_transform(data[col])

是不是很简单 只需要这么几句就可以了 但要想提高成绩光靠这几行是没啥用的QAQ

第五步:数据填充

数据预处理最最最关键的一步来了,那就是把空缺的数值都给我填上!这里我话不多说直接上代码

for item in data.columns:
    if type(item) == str:
        if data[item].isnull().sum()>0:
            data[item].fillna('None',inplace=True)
    else:
        if data[item].isnull().sum()>0:
            data[item].fillna(data[item].median(),inplace=True)

print(data.head())

填补前:   ID     位置  出租方式     区  卧室数量  ...  时间  楼层  装修情况         距离      Label
0   0  118.0   NaN  11.0     1  ...   1   2   NaN  76.416667   5.602716
1   1  100.0   NaN  10.0     1  ...   1   1   NaN  70.916667  16.977929
2   2  130.0   NaN  12.0     2  ...   1   0   NaN  57.250000   8.998302
3   3   90.0   NaN   7.0     3  ...   1   2   NaN  65.833333   5.602716
4   4   31.0   NaN   3.0     2  ...   1   0   NaN        NaN   7.300509


填补后:   ID     位置  出租方式     区  卧室数量  ...  时间  楼层  装修情况         距离      Label
0   0  118.0  None  11.0     1  ...   1   2  None  76.416667   5.602716
1   1  100.0  None  10.0     1  ...   1   1  None  70.916667  16.977929
2   2  130.0  None  12.0     2  ...   1   0  None      57.25   8.998302
3   3   90.0  None   7.0     3  ...   1   2  None  65.833333   5.602716
4   4   31.0  None   3.0     2  ...   1   0  None       None   7.300509

是不是发现了变化,这里我用了for循环遍历每一个特征,逐个进行处理

第六步:划分数据集

from sklearn.model_selection import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split( X , Y , test_size = 0.2, random_state = 0)

这里test_size 我更偏向于用0.3

主要参数说明:
train_data:待划分的样本集
train_target:待划分的样本集的标签集
test_size:样本占比,test数据集的占比 如果是整数,就是样本集的数量
random_state:是随机数的种子

第七步:特征缩放

在一个数据集中 经常会出现特征与特征之间 数值差异很大 这样很不利于计算机进行训练 所以我们需要对特征进行一定的缩放

from sklearn.preprocessing import StandardScaler
data_s = StandardScaler()
data = data_s.fit_transform(data)

这里的StandardScaler是去均值和方差归一化,防止两个特征列中特征值的范围差距过大,从而导致的收敛速率变慢。

 

该文章部分内容摘自Avik Jain的机器学习

 

志趣相通的朋友可以加个vx一起交流

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值