摘要:关于简书 - 写文章 (jianshu.com)的代码理解
参考:
(1)《机器学习》周志华著,清华大学出版社
(2)《Hands-On Machine Learning with Scikit-Learn and TensorFlow》by Aurélien Géron
(3)《python机器学习》[美]塞巴斯蒂安·拉施卡(Sebastian Raschka) 著 高明 徐莹 陶虎成 译
(4)数据集的分割:https://developer.aliyun.com/article/672642
(5)数据归一化:https://blog.csdn.net/GentleCP/article/details/109333753
(6)模型评估r2_score:https://blog.csdn.net/qq_38890412/article/details/109565970
(7)LinearRegression解析:https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html
(8)matplotlib rc配置:https://blog.csdn.net/weixin_39010770/article/details/88200298
(9)matplotlib.pyplot.plot详解:https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.plot.html#matplotlib.pyplot.plot
1.机器学习过程
(1)Look at the big picture
(2)Get the data
(3)Discover and visualize the data to gain insights
(4)Prepared data for Machine Learning algorithms
(5)Select a model and train it
(6)Fine-tune ur model
(7)Present ur solution
(8)Launch, monitor and maintain ur system
4.数据预处理
4.1什么是数据预处理
百度百科对数据预处理有如下定义(数据预处理_百度百科 (baidu.com)):
数据预处理(data preprocessing)是指在主要的处理以前对数据进行的一些处理。如对大部分地球物理面积性观测数据在进行转换或增强处理之前,首先将不规则分布的测网经过插值转换为规则网的处理,以利于计算机的运算。另外,对于一些剖面测量数据,如地震资料预处理有垂直叠加、重排、加道头、编辑、重新取样、多路编辑等。
4.2为什么要进行数据预处理
为了尽可能的发挥机器学习算法的性能,往往对原始数据的格式等有一些特定的要求,但原始数据很少能达到此标准。因此,数据预处理是机器学习应用过程中必不可少的重要步骤之一。
某些属性间可能存在较高的关联,因此存在一定的数据冗余。在此情况下,使用数据降维技术将数据压缩到相对低纬度的子空间是非常有用的。数据降维不仅能够使得所需的存储空间更小,而且还能够使学习算法运行更快。
为了保证算法不仅在训练数据集上有效,同时还能很好的应用于新数据,也就是提高在绪论(二)中提到的“泛化”能力,我们通常会随机地将数据集划分为训练数据集和测试数据集。我们使用训练数据来训练及优化我们的机器学习模型,在完成后,使用测试数据集对最终的模型进行评估。
4.3数据预处理的方式
关于数据的预处理,大致有以下几种处理方式:
缺失数据处理、处理类别数据、将数据集划分为训练数据集和测试数据集、将特征的值缩放到相同的区间、选择有意义的特征、通过数据降维压缩数据……
之后会写专题专门讲解这一部分,这里我们对波士顿房价数据集做简单处理。
4.4代码实现
# 去除空值
data = data.dropna(how='any') # 该函数用法具体可以参考pandas.DataFrame.dropna — pandas 1.2.4 documentation
data
# 划分训练集与测试集
x = np.array(data.iloc[:, :-1])
y = np.array(data.iloc[:, -1:])
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=0)
关于训练集与测试集的划分,大致有三种方法:留出法,交叉验证法,自助法。使用from sklearn.model_selection import train_test_split, KFold可以利用python实现留出法和交叉验证法,关于自助法可以参考Bootstrapping算法(附python代码) - 知乎 (zhihu.com),后续会专门写一篇来理解划分训练集与测试集的原理与代码实现。
# 归一化
min_max_scaler = preprocessing.MinMaxScaler(feature_range=(-1, 1))
x_train = min_max_scaler.fit_transform(x_train)
x_test = min_max_scaler.fit_transform(x_test)
y_train = min_max_scaler.fit_transform(y_train)
y_test = min_max_scaler.fit_transform(y_test)
将特征的值缩放到相同的区间有两种方式:归一化(normalization)与标准化(standardization)。
多数情况下,“归一化”指的是将特征的值缩放到区间[0, 1],它是最小-最大缩放的一个特例;“标准化”指的是将特征列的均值设为0,方差为1,使得特征列的值呈标准正态分布。具体理解后续写出。