一. 数据预处理
1)导入主要的库,pandas数据处理库,Numpy数学运算库。
2)导入数据集,数据集的格式有很多,json,csv,txt,等
以csv为例,通过pandas读取。
3)数据集中会出现很多问题,例如缺失值,异常值,会影响模型的准确率,所以需要对这些值进行处理。这里会用到sklearn库,sklearn.preprocessing中的Imputer中完成。
4)处理标签值,如果是分类问题,类别需要转化成数字,作为模型的目标值。这里使用的是sklearn.preprocesing中的LabelEncoder。
5)特征进行缩放,不同的特征值可能会出现差距过大的问题,所以需要使用特征的标准化或者是归一化,导入sklearn.preprocessing中的StandardScalar。
6)将数据集进行拆分,按照一定的百分比进行划分成训练集和测试集。这里使用的是sklearn.crossvalidation中的train_test_split()方法。
PS:
1.缺失值该如何处理,单纯的使用中间值或者是平均值替换,是否可以有好的结果。
2.特征缩放问题,为什么不同特征值,会出现问题。
3.如果只使用归一化或者是标准化,是否是影响原始特征所包含的信息,是否意味着对所有的特征值在权重方面一视同仁。
二. 代码
-
导入库
import numpy as np
import pandas as pd -
导数数据
dataset = pd.read_csv(‘Data.csv’)//读取csv文件
X = dataset.iloc[ : , :-1].values//.iloc[行,列]
Y = dataset.iloc[ : , 3].values
// : 全部行 or 列;[a]第a行 or 列
// [a,b,c]第 a,b,c 行 or 列 -
处理缺失值
from sklearn.preprocessing import Imputer
imputer = Imputer(missing_values = “NaN”, strategy = “mean”, axis = 0)
imputer = imputer.fit(X[ : , 1:3])
X[ : , 1:3] = imputer.transform(X[ : , 1:3])
sklearn.preprocessing.Imputer(missing_values=’NaN’, strategy=’mean’, axis=0, verbose=0, copy=True)
参数说明:
missing_values :缺失值可以是整数或者是NaN。
stategy:替换的策略,默认是使用均值“mean”
1)如果是mean,用特征列的均值替换
2)如果是median,用特征列的中位数替换
3)如果是most_frequent时,用特征列的众数替换
axis:指定是行还是列。
copy:默认值为True,表示不会再原数据集上进行修改,设置为Flase时,直接会修改。如果是下面的情况,设置Flase时,也不会就地修改
1)X不是浮点值数组
2)X稀疏且missing_value = 0
3)axis = 0 X是CRS稀疏矩阵列压缩
4)axis = 1 X是CSC稀疏矩阵行压缩 -
转换分类数据标签
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder_X = LabelEncoder()
X[ : , 0] = labelencoder_X.fit_transform(X[ : , 0])
onehotencoder = OneHotEncoder(categorical_features = [0])
X = onehotencoder.fit_transform(X).toarray()
labelencoder_Y = LabelEncoder()
Y = labelencoder_Y.fit_transform(Y) -
拆分数据
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) -
归一化数据
from sklearn.preprocessing import StandardScaler
sc_X = StandardScaler()
X_train = sc_X.fit_transform(X_train)
X_test = sc_X.transform(X_test)
参考:
https://github.com/MLEveryday/100-Days-Of-ML-Code/blob/master/Code/Day 1_Data_Preprocessing.md
https://blog.csdn.net/weixin_38656890/article/details/80849334