文章目录
一、单变量线性回归
最简单的开始:线性方程
简单来说:
线性:穿过很多点的直线,利用这个算法生成的模型一定是一条直线
回归:求解方程的步骤,让数据回归(聚集)到一个特定的模型中,如果特定的模型指的是线性,那么就是让所有点都靠近这条线
线性回归实例:
房屋面积(x) | 房屋总价(y) |
---|---|
40 | 78 |
96 | 200 |
135 | 330 |
… | … |
m:训练集数据的总量
x:输入变量
y:输出变量,也叫做标签
(x,y):一个训练样本
( xi , yi ):第i个训练样本
属于有监督的学习:可以预测到一个确定的结果
我们知道机器学习的基本步骤是:
对于一元线性回归(单变量线性回归)来说,学习算法的模型公式为: y = ax + b
(a:斜率 b:截距)
我们换一种写法:hθ(x) = θ0 + θ1x1
线性回归实际上要做的事是:选择合适的参数(θ0,θ1),使得模型hθ(x)能很好的拟合我们的数据
如图,图3才是最接近训练集的拟合,因此也就是要求出这条直线的系数θ0,θ1
用法:
- 导包:
from sklearn.linear_model import LinearRegression - 导数据:把数据x 和y 准备好
- 建模:
实例化一个线性回归类
lin_reg = LinearRegression()
通过fit()方法训练模型得到hθ(x)
lin_reg.fit(x,y)
建模完成后,模型的参数就已经存到了lin_reg里,可以通过 lin_reg.intercept_ 和 lin_reg.coef_ 查看系数 - 进行预测
把需要做预测的输入数据x_predict准备好,进行预测
lin_reg.predict(x_predict)
练习:利用Sklearn做线性回归的预测
import numpy as np
from sklearn.linear_model import LinearRegression
#准备好数据 x ,y
X = 2 * np.random.rand(100, 1) #生成100行1列的0~2的均匀分布的数
y = 4 + 3 * X + np.random.randn(100, 1) # 加了误差,100行1列,服从正态分布
lin_reg = LinearRegression() # 实例化对象
# 训练模型:fit()方法
lin_reg.fit(X, y)
# intercept 是截距 coef是参数
print(lin_reg.intercept_, lin_reg.coef_)
# 预测
X_new = np.array([[0], [2]]) #x的值必须是2维数组
print(lin_reg.predict(X_new))
运行结果:
"""
[3, 5, 7, 9, 11, 13, 15, 17, 19, 21, ?]
求第11个数
"""
import numpy as np
from sklearn.linear_model import LinearRegression
x = np.array([1,2,3,4,5,6,7,8,9,10]).reshape(-1,1) # x是二维数组
y = np.array([3,5,7,9,11,13,15,17,19,21])
lin_reg = LinearRegression() # 实例化对象
lin_reg.fit(x,y) # 进行学习
print(lin_reg.predict([[11]])) # 预测第11个值,二维数组
print(lin_reg.intercept_, lin_reg.coef_) # 斜率和截距
运行结果:
numpy模块:用来存储和处理大型矩阵,用于数组计算
import numpy as np
#创建一维数组:
arr