Table of Contents
步骤
第1步:导入需要的库
这两个是我们每次都需要导入的库,NumPy包含数学计算函数,Pandas用于导入和管理数据集。
import numpy as np
import pandas as pd
第2步:导入数据集
数据集通常是.csv格式。CSV文件以文本形式保存表格数据。文件的每一行是一条数据记录。我们使用Pandas的read_csv方法读取本次csv文件为一个数据帧。然后,从数据帧中制作自变量和因变量的矩阵和向量。
dataset = pd.read_csv('Data.csv') //读取csv文件
X = dataset.iloc[ : , :-1].values //.iloc[行,列] -1这里表示倒数第二列
Y = dataset.iloc[ : , 3].values //:全部行或列;[a]第一行或列;[a,b,c]第a,b,c行或列。
第3步:处理丢失数据
我们得到的数据很少是完整的。数据可能因为各种原因丢失,为了不降低机器学习模型的性能,需要处理数据。我们可以用整列的平均值或中间值替换丢失的数据。我们用sklearn.preprocessing库中的Imputer类完成这项任务。
from sklearn.preprocessing import Imputer
imputer = Imputer(missing_values = "NaN", strategy = "mean" , axis = 0)
imputer = imputer.fit(X[ : , 1:3]) #用数据拟合fit X的1 2列
X[ : , 1:3] = imputer.transform(X[ : , 1:3]) #计算缺失数据
第4步:解析分类数据
分类数据指的是含有标签值而不是数字值的变量。取值范围通常是固定的。例如“Yes”和“No”不能用于模型的数学计算,所以需要解析成数字。为实现这一功能,我们从sklearn.preprocesing库导入LabelEncoder类。
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
# 利用LabelEncoder() 将转换成连续的数值型变量。即是对不连续的数字或者文本进行编号
labellencoder_X = LabelEncoder() #Encode labels with value between 0 and n_classes-1.
X[ : , 0] = labelencoder_X.fit_transform(X[ : , 0]) #Fit label encoder and return encoded labels
# print(X[:,0]) [0 2 1 2 1 0 2 0 1 0]
#创建虚拟变量
onehotencoder = OneHotEncoder(categorical_features = [0]) #categotical_features是需要独热编码的列索引
X = onehotencoder.fit_transform(X).toarray()
labelencoder_Y = LabelEncoder()
Y = labelencoder_Y.fit_transform(Y) #print(Y) [0 1 0 0 1 1 0 1 0 1]
第5步:拆分数据集为测试集合训练集合。
把数据集拆分成两个:一个是用来训练模型的训练集合,另一个是用来验证模型的测试集合。两者比例一般是80:20。我们导入sklearn.model_selection库中的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)
第6步:特征缩放
大部分模型算法使用两点间的欧氏距离表示,但此特征在幅度、单位和范围姿态问题上变化很大。在距离计算中,高幅度的特征比低幅度特征权重更大。可用特征标准化或Z值归一化解决。导入sklearn.preprocessing库的StandardScalar类。
from sklearn.preprocessing import StandardScaler
sc_X = StandardScaler()
X_train = sc_X.fit_transform(X_train)
X_test = sc_X.transform(X_test)
相关知识点链接
- sklearn preprocessing中imputer的说明
https://scikit-learn.org/stable/modules/impute.html#impute
- onehotencoder介绍
https://blog.csdn.net/accumulate_zhang/article/details/78510571
http://www.cnblogs.com/king-lps/p/7846414.html
https://www.cnblogs.com/zhoukui/p/9159909.html
- LabelEncoder介绍
https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.LabelEncoder.html
难受
第5步时报错:
No module named 'sklearn.model_selection'
- anaconda自带的sklearn库版本低,需要更新sklearn库https://blog.csdn.net/jinlong_xu/article/details/72862047
- conda list不现实列表,而且输入更新命令又报 PackageNotFoundError
- https://blog.csdn.net/yaochen2507/article/details/79540195 可以解决conda list之后不显示列表的问题,但是conda update scikit-learn依然报错PackageNotInstalledError: Package is not installed in prefix.
- 然后就去训练了,然而两天过去了,我换了个电脑,重新下载了anaconda,sklearn自带的版本都1.9够用的。之前那个电脑等拆机的螺丝刀和清灰的东西到了把灰扫扫再试。
总结
- 导入相关库--->导入数据集--->处理缺失的数据--->将离散的标签值转化为数字标签--->拆分数据集为测试和训练用--->特征缩放
- from xxx import xxx--->pd.read_csv(xxx.csv) iloc --->sklearn.preprocessing库中的imputer类--->sklearn.preprocessing库中的LabelEncoder类和OneHotEncoder类--->sklearn.model_selection类中的train_test_split()方法--->sklearn.preprocessing库的StandardScalar类。