-
算法处理的是数据,不是字符串,也不是布尔值True或者False。 -
不可以删除数据。可以求平均值 -
对于字符串类型以及布尔类型的分类数据。需要转换成0,1,2这样的数字索引。
1. 导入数据,划分自变量、因变量,补充缺失值
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
dataset=pd.read_csv('Data2.csv')
X=dataset.iloc[:,:-1].values
y=dataset.iloc[:,3].values
from sklearn.impute import SimpleImputer
imputer=SimpleImputer(missing_values=np.nan,strategy="mean")
imputer=imputer.fit(X[:,1:3])
X[:,1:3]=imputer.transform(X[:,1:3])```
使用数据如下:
Country Age Salary Purchased 0 France 44.0 72000.0 No 1 Spain 27.0 48000.0 Yes 2 Germany 30.0 54000.0 No 3 Spain 38.0 61000.0 No 4 Germany 40.0 NaN Yes 5 France 35.0 58000.0 Yes 6 Spain NaN 52000.0 No 7 France 48.0 79000.0 Yes 8 Germany 50.0 83000.0 No 9 France 37.0 67000.0 Yes
2. 字符串编码成数字或onehot
直接对字符编码成1,2,3的缺点
本来平等的字符串,变成1,2,3之后,好像有先后或者大小顺序了。这不太好,所以要用onehot编码。
from sklearn.preprocessing import LabelEncoder
labelencoder_y=LabelEncoder()
y=labelencoder_y.fit_transform(y)
labelencoder_X=LabelEncoder()
X[:,0]=labelencoder_X.fit_transform(X[:,0])
from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import ColumnTransformer
onehotencoder = ColumnTransformer([('encoder', OneHotEncoder(), [0])], remainder = 'passthrough')
X = onehotencoder.fit_transform(X)
3. 划分训练集与测试集
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)
4. 特征缩放
避免因为数据量级的不同导致不同特征对结果的影响不同。 特征缩放有两种方式:
- 标准化
- 归一化
标准化:
归一化
from sklearn.preprocessing import StandardScaler
standardScaler=StandardScaler()
X_train=standardScaler.fit_transform(X_train)
X_test=standardScaler.transform(X_test)
步骤回顾
- pandas导入数据
- 自变量和因变量分离
- 缺失值处理
- 字符串变成数字
- 划分训练集和测试集
- 特征缩放
注意事项总结:
- 不能有数据缺失的情况
- 所有分类类型的数据变成数字类型的数据
- 特征缩放。算法不能知道哪个特征更重要,不能让某个特征主导了计算结果。应该让不同的特征无差别地影响结果。
预处理的好处是能够更快地收敛,更接近真实的结果,会极大地减少训练的时间,提升预测的准确度。
|