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输出:


1241

被折叠的 条评论
为什么被折叠?



