机器学习——数据预处理

Step 1 导入数据集

利用pandas中的read_csv读取.csv格式的数据集,制作自变量与因变量的矩阵或向量。
CSV文件是以文本形式保存表格数据,每一行为一个数据。

dataset = pd.read_csv('Data.csv')
X = dataset.iloc[ : , :-1].values
Y = dataset.iloc[ : , 3].values

pandas中索引的使用

.loc
.loc[],中括号里面是先行后列,以逗号分割,行和列分别是行标签和列标签。

data.loc['b':'c','B':'C']

.iloc
.iloc[]与loc一样,中括号里面也是先行后列,行列标签用逗号分割,与loc不同的之处是.iloc 是根据行数与列数来索引的。

data.iloc[1:3,1:3]

Step 2 处理丢失数据

为了不降低机器学习模型的性能需要处理丢失数据,可以使用平均值等替换丢失数据。
我们利用sklearn.preprocessing库中的Imputer类进行处理。

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])

Step 3 解析分类数据

分类数据是指含有标签值而不是数字值得变量,取值范围通常是固定的。例如“Yes”和“No”不能用于模型的数学计算,所以我们需要解析分类数据。
我们利用sklearn.prepocessing库导入LabelEncoder类。

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)

LabelEncoder 和 OneHotEncoder 的区别

LabelEncoder 将一列文本数据转化成数值。
例如,[red, blue, red, yellow] = [0,2,0,1]

OneHotEncoder 将一列文本数据转化成一列或多列只有0和1的数据。
例如,[red, blue, red, yellow] = [1,2,1,3] 会被转化成3列用0和1表示的数据列。
对于类别取值较多的情况下使用 OneHotEncoder时需要注意以下问题:

  • 使用稀疏向量来节省空间。因为在独热编码下,向量只有某一维取1,其他位置取值为0。
  • 配合特征选择来降低维度。高维度的特征的问题:一是K近邻算法中距离难以有效衡量;二是逻辑回归模型中,参数数量随维度的增加而增高,引发过拟合问题;三是通常只有部分维度是对分类、预测有帮助的。

Step 4 拆分数据集为测试集和训练集

我们通过sklearn.crossvalidation库中的train_test_split()方法。

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)

Step 5 特征归一化

数据集的标准化是许多机器学习估计的共同要求,如果一个特征对应的数据的方差很大,那么它可能支配目标函数,使得模型无法向预期那样学习其它特征。

sc_X = StandardScaler()
X_train = sc_X.fit_transform(X_train)
X_test = sc_X.transform(X_test)

前面的训练数据先fit,然后transform来中心化后,后面的测试数据直接用之前的均值和方差来transform。


参考链接

https://github.com/MLEveryday/100-Days-Of-ML-Code/blob/master/Code/Day%201_Data_Preprocessing.md

上一篇:iOS签发者无效


下一篇:【373】LabelEncoder 相关