1 简介
文章作为自己学习整理机器学习的心得的笔记,只整理学习思路和代码实现,作为回忆和备忘。
此外这里只整理机器学习中的非深度学习的算法,深度学习的会另外整理。
2 线性回归
(1)算法是核心
机器学习的核心算法不是代码,同其他算法不同之处在于,其他算法是在数据结构、代码实现以及参数已经确定的前提下,输入特定的数据来得到固定的响应输出;机器学习的核心算法,往往算法的参数没有确定,算法的代码不是固定的。通过数据驱动,实现参数的最优化的选择,建立输入输出的模型,对于不同的训练数据往往会使得模型参数有些许差异。因此需要算法既要保证最优化的实现,同时需要对不同的训练数据具有普适性。对于就已经建立的模型可以实现对Test Data的有效预测,这也是机器学习算法相比于以前算法的不同之处。
机器学习按照训练模型时候数据是否具有真值标记,可以分为监督学习和非监督学习,线性回归属于最简单的监督学习。对于监督学习中预测模型的建立本质上是损失函数的最小化求解过程,求解方法有很多种包括最小梯度法、牛顿法等等。
线性回归调整样本下不同特征的权重系数实现对输入样本的输出预测,权重系数的确定依照的是训练样本输入时预测值和真值之间误差最小的原则进行确定的,也就是我们常说的损失函数最小。
(2)代码实现
# -*- coding: utf-8 -*-
import pandas as pd
from io import StringIO
import matplotlib.pyplot as plt
from sklearn import linear_model
# 房屋面积与价格历史数据(csv文件)
csv_data = 'square_feet,price\n150,6450\n200,7450\n250,8450\n300,9450\n350,11450\n400,15450\n600,18450\n'
# 读入dataframe
df = pd.read_csv(StringIO(csv_data))
print(df)
# 建立线性回归模型
regr = linear_model.LinearRegression()
# 拟合
regr.fit(df['square_feet'].reshape(-1, 1), df['price']) # 注意此处.reshape(-1, 1),因为X是一维的!
# 1.真实的点
plt.scatter(df['square_feet'], df['price'], color='blue')
# 2.拟合的直线
plt.plot(df['square_feet'], regr.predict(df['square_feet'].reshape(-1,1)), color='red', linewidth=4)
plt.show()
3 知识补充
误差指的是线性预测模型建立过程中,模型预测值和真值之间的差值。当我们认为所有的误差其分布为均值为0的高斯分布时,事实上在大量数据的时候误差总是呈现高斯分布,我们可以将函数的最小误差预测准则转化为某个样本(先验)条件下的最大概率的问题,当有很多样本是误差和的最小问题可以转换为先验条件下的最大似然。
这也是误差函数选择为误差的平方的原因