AI
人工智能
Python机器学习/LinearRegression(线性回归模型)(附源码)
LinearRegression(线性回归)
1.线性回归简介
线性回归定义:
我个人的理解就是:线性回归算法就是一个使用线性函数作为模型框架($y = w*x + b$)、并通过优化算法对训练数据进行训练、最终得出最优(全局最优解或局部最优)参数的过程。
y:我们需要预测的数值;
w:模型的参数(即我们需要通过训练调整的的值)
x:已知的特征值
b:模型的偏移量
我们的目的是通过已知的x和y,通过训练找出合适的参数w和b来模拟x与y之间的关系,并最终通过x来预测y。
分类:
线性回归属于监督学习中的回归算法;
线性回归作为机器学习的入门级算法,很适合刚接触机器学习的新手。虽然线性回归本身比较简单,但是麻雀虽小,五脏俱全,其中涉及到的“线性模型”、“目标函数”、“梯度下降”、“迭代”、“评价准则”等思想与其他复杂的机器学习算法是相通的,深入理解线性回归后可以帮助你更加轻松的学习其他机器学习算法。
2.线性回归模型解析
2.1 线性回归模型示意图
2.2模型的组成部件
2.2.1 假设函数(Hypothesis function)
$h_w(x) = b + w_0x_0 + w_1x_1 + ··· +w_nx_n$
使用向量方式表示:
$X=begin{bmatrix}
x_0
\ x_1
\vdots
\ x_n
end{bmatrix},W=begin{bmatrix}
w_0
\ w_1
\vdots
\ w_n
end{bmatrix}$
则有:$h_w(x) = W^TX+ b$
2.2.2 损失函数:(Cost function)
这里使用平方差作为模型的代价函数
$J(w) = frac{1}{2m}sum_{i=1}^{m}(h_w(x^{(i)}) - y^{(i)})^2$
2.2.3 目标函数:(Goal function)
$minimize(J(w))$
2.2.4 优化算法:(optimization algorithm)
梯度下降法(Gradient descent)
关于梯度下降法这里不详细介绍;
3.使用python实现线性回归算法
1 #-*- coding: utf-8 -*-
2 importnumpy as np3 from matplotlib importpyplot as plt4
5
6 #生成训练使用数据;这里线性函数为 y = 1.5*x + 1.3
7 defdata_generate():8 #随机生成100个数据
9 x = np.random.randn(100)10 theta = 0.5 #误差系数
11 #为数据添加干扰
12 y = 1.5*x + 1.3 + theta*np.random.randn(100)13 returnx,y14
15 classLinearRegression():16 '''
17 线性回归类18 参数:19 alpha:迭代步长20 n_iter:迭代次数21 使用示例:22 lr = LinearRegression() #实例化类23 lr.fit(X_train,y_train) #训练模型24 y_predict = lr.predict(X_test) #预测训练数据25 lr.plotFigure()用于画出样本散点图与预测模型26 '''
27 def __init__(self,alpha=0.02,n_iter=1000):28 self._alpha = alpha #步长
29 self._n_iter = n_iter #最大迭代次数
30
31 #初始化模型参数
32 definitialPara(self):33 #初始化w,b均为0
34 return0,035
36 #训练模型
37 deffit(self,X_train,y_train):38 #保存原始数据
39 self.X_source =X_train.copy()40 self.y_source =y_train.copy()41
42 #获取训练样本个数
43 sample_num =X_train.shape[0]44 #初始化w,w0
45 self._w, self._b =self.initialPara()46
47 #创建列表存放每次每次迭代后的损失值
48 self.cost =[]49
50 #开始训练迭代
51 for _ inrange(self._n_iter):52 y_predict =self.predict(X_train)53 y_bias = y_train -y_predict54 self.cost.append(np.dot(y_bias,y_bias)/(2 *sample_num))55 self._w += self._alpha * np.dot(X_train.T,y_bias)/sample_num56 self._b += self._alpha * np.sum(y_bias)/sample_num57
58 defpredict(self,X_test):59 return self._w * X_test +self._b60
61 #画出样本散点图以及使用模型预测的线条
62 defplotFigure(self):63 #样本散点图
64 plt.scatter(self.X_source,self.y_source,c='r',label="samples",linewidths=0.4)65
66 #模型预测图
67 x1_min =self.X_source.min()68 x1_max =self.X_source.max()69 X_predict = np.arange(x1_min,x1_max,step=0.01)70 plt.legend(loc='upper left')71
72 plt.plot(X_predict,self._w*X_predict+self._b)73 plt.show()74
75 if __name__ == '__main__':76 #创建训练数据
77 x_data,y_data =data_generate()78
79 #使用线性回归类生成模型
80 lr =LinearRegression()81 lr.fit(x_data,y_data)82
83 #打印出参数
84 print(lr._w,lr._b)85 #画出损失值随迭代次数的变化图
86 plt.plot(lr.cost)87 plt.show()88 #画出样本散点图以及模型的预测图
89 lr.plotFigure()90
91 #预测x
92 x = np.array([3])93 print("The input x is{0},then the predict of y is:{1}".format(x,lr.predict(x)))
线性回归代码
更多线性回归的代码参考github:线性回归
内容来源于网络,如有侵权请联系客服删除