机器学习(一)-数据预处理

1. 导入数据

数据格式:

#城市,年龄,收入,购买意向
Country,Age,Salary,Purchased
France,34,6700,No
Korea,26,3400,Yes
Germany,34,5800,No
Korea,42,,No
Germany,36,6100,Yes
France,,6200,Yes
Korea,38,4700,No
France,34,8600,Yes
Germany,42,6300,Yes
France,52,7600,No
# -*- coding: utf-8 -*-
# 1.导入标准库
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
# 2. 导入数据集
dataset = pd.read_csv('house/Data.csv')
x = dataset.iloc[:, :-1]
y = dataset.iloc[:, 3]
print('---x---')
print(x)
print('---y---')
print(y)

输出结果:

---x---
    Country   Age  Salary
0   France  34.0  6700.0
1    Korea  26.0  3400.0
2  Germany  34.0  5800.0
3    Korea  42.0     NaN
4  Germany  36.0  6100.0
5   France   NaN  6200.0
6    Korea  38.0  4700.0
7   France  34.0  8600.0
8  Germany  42.0  6300.0
9   France  52.0  7600.0
---y---
 0     No
1    Yes
2     No
3     No
4    Yes
5    Yes
6     No
7    Yes
8    Yes
9     No

2. 处理缺失值

缺失值处理的三种方法:

  • 直接使用含有缺失值的特征;
  • 删除含有缺失值的特征(该方法在包含缺失值的属性含有大量缺失值而仅仅包含极少量有效值时是有效的);
  • 缺失值补全。

常见的缺失值补全方法:平均值和中位数。平均值是对整体很好的估计,而中位数是对整体中心很好的估计。如果数据特征分布比较稳定,平均值的效率会更高。中位数的稳定更好,能避免异常数值的影响。由于样本数据分布正常,这里使用平均值插值处理。

x['Age'] = x['Age'].fillna(x['Age'].mean())
x['Salary'] = x['Salary'].fillna(x['Salary'].mean())
print(x)

结果输出:

    Country        Age       Salary
0   France  34.000000  6700.000000
1    Korea  26.000000  3400.000000
2  Germany  34.000000  5800.000000
3    Korea  42.000000  6155.555556
4  Germany  36.000000  6100.000000
5   France  37.555556  6200.000000
6    Korea  38.000000  4700.000000
7   France  34.000000  8600.000000
8  Germany  42.000000  6300.000000
9   France  52.000000  7600.000000

3. 类别特征编码

对于字符串特征,我们需要把类别转换成数值,简单的做法是直接转换为数字。如:France=0,Korea=1,Germany=2。这种做法由于数字是连续的容易给机器学习一个误导。因此处理类别特征常用的方法是独热编码

数值编码:
在这里插入图片描述

独热编码是由0和1组成,如图:
在这里插入图片描述

代码如下:

x = pd.get_dummies(x,dtype=int)

输出结果:

         Age       Salary  Country_France  Country_Germany  Country_Korea
0  34.000000  6700.000000               1                0              0
1  26.000000  3400.000000               0                0              1
2  34.000000  5800.000000               0                1              0
3  42.000000  6155.555556               0                0              1
4  36.000000  6100.000000               0                1              0
5  37.555556  6200.000000               1                0              0
6  38.000000  4700.000000               0                0              1
7  34.000000  8600.000000               1                0              0
8  42.000000  6300.000000               0                1              0
9  52.000000  7600.000000               1                0              0

4. 划分训练集和测试集

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)

输出结果:

x输出:
在这里插入图片描述

y输出:

在这里插入图片描述

5. 标准化

定义:将原数据转换为符合均值为0,标准差为1的标准正太分布的数据。

公式:

在这里插入图片描述

为什么要标准化:

  • 提升模型的收敛速度(加快梯度下降的求解速度)。
  • 提升模型的精度(消除量级和量纲的影响)。
  • 简化计算。
    在这里插入图片描述
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
x_train = scaler.fit_transform(x_train)
x_test = scaler.fit_transform(x_test)

标准化后的数据:

x输出:
在这里插入图片描述

y输出:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值