一元线性回归
假设你想计算匹萨的价格。 虽然看看菜单就知道了,不过也可以用机器学习方法建一个线性回归模型,通过分析匹萨直径与价格的线性关系,来预测任意直径匹萨的价格。假设我们查到了部分匹萨的直径与价格的数据,这就构成了训练数据,如下表所示:
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()
原创文章,作者:朋远方,如若转载,请注明出处:https://caovan.com/08-xianxinghuigui-linear-regression/.html