机器学习之线性回归 Linear Regression(二)Python实现

一元线性回归

        假设你想计算匹萨的价格。 虽然看看菜单就知道了,不过也可以用机器学习方法建一个线性回归模型,通过分析匹萨直径与价格的线性关系,来预测任意直径匹萨的价格。假设我们查到了部分匹萨的直径与价格的数据,这就构成了训练数据,如下表所示:


import matplotlib.pyplot as plt
def runplt():
	plt.figure()
	plt.title("Cost and diameter")
	plt.xlabel("Diameter/inch")
	plt.ylabel("Cost/dollar")
	plt.axis([0,25,0,30])
	plt.grid(True)
	return plt
plt = runplt()
X = [[6],[8],[10],[14],[18]]
y = [[7],[9],[13],[17.5],[18]]
plt.plot(X,y,'k.')
plt.show()

        上图中,x轴表示匹萨直径,y轴表示匹萨价格。 能够看出,匹萨价格与其直径正相关,这与我们的日常经验也比较吻合,自然是越大越贵。

        下面就用 scikit-learn 来建模

#创建并拟合模型
from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(X,y)
print("Predict 12 inch cost:$%.2f" % model.predict([[12]]))

>> Predict 12 inch cost:$13.68
        一元线性回归假设输入变量和输出变量之间存在线性关系,这个线性模型所构成的空间是一个超平面(hyperplane)。 超平面是 n 维欧氏空间中维度减一的线性子空间,如平面中的直线、空间中的平面,总比包含它的空间少一维。 在一元线性回归中,一个维度是输入变量,另一个维度是输出变量,总共两维。 因此,其超平面只有一维,就是一条线。

        上述代码中 sklearn.linear_model.LinearRegression 类是一个估计器(estimator)。 估计器依据观测值来预测结果。 在 scikit-learn 里面,所有的估计器都带有 fit() 和 predict() 方法。 fit() 用来分析模型参数,predict() 是通过 fit() 算出的模型参数构成的模型,对解释变量进行预测获得的值。 因为所有的估计器都有这两种方法,所有 scikit-learn 很容易实验不同的模型。 LinearRegression 类的 fit() 方法学习下面的一元线性回归模型:

        y 表示输出变量的预测值,本例指匹萨价格预测值, x是输入变量,本例指匹萨直径。 截距和相关系数是线性回归模型最关心的事情。下图中的直线就是匹萨直径与价格的线性关系。 用这个模型,可以计算不同直径的价格。

plt = runplt()
X = [[6],[8],[10],[14],[18]]
y = [[7],[9],[13],[17.5],[18]]
model = LinearRegression()
model.fit(X,y)
X2 = [[0], [10], [14], [25]]
y2 = model.predict(X2)
plt.plot(X, y, 'k.')
plt.plot(X2, y2, 'g-')
plt.show()


带成本函数的模型拟合评估

        由若干参数生成的回归直线。 如何判断哪一条直线才是最佳拟合呢?

        一元线性回归拟合模型的参数估计常用方法是普通最小二乘法(ordinary least squares )或线性最小二乘法(linear least squares)。 首先,我们定义出拟合成本函数,然后对参数进行数理统计。

        成本函数(cost function)也叫损失函数(loss function),用来定义模型与观测值的误差。 模型预测的价格与训练集数据的差异称为残差(residuals)或训练误差(training errors)。 后面会用模型计算测试集,那时模型预测的价格与测试集数据的差异称为预测误差(prediction errors)或训练误差(test errors)。模型的残差是训练样本点与线性回归模型的纵向距离,如下图所示:

model = LinearRegression()
model.fit(X,y)
X2 = [[0], [10], [14], [25]]
y2 
  • 16
    点赞
  • 129
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值