机器学习入门ONE——线性回归+Python用解析解的方式,模拟预测求解

前言:通过考研让我加深了对数学的理解,提升一小步数学思想,终于可以开始机器学习的新征程了。

刚学了线性回归、梯度下降和归一化。感觉考研数学一完全可以驾驭。目前....

求最大似然估计是每年数学一的必考题。

梯度下降也可以用导数知识轻松解释。

实时证明沉寂了一年多的我去考研,不碰代码。对我来说完全是个正确的决定。

 

 

 线性回归

  线性:y=a*x 一次方的变化
  回归:回归到平均值

简单线性回归
  算法==公式
  一元一次方程组

  一元指的一个X:影响Y的因素,维度

  一次指的X的变化:没有非线性的变化

  y = a*x + b
  x1,y1 x2,y2 x3,y3 x4,y4 ...

 

做机器学习,没有完美解,只有最优解,做机器学习就是要以最快的速度,找到误差最小的最优解。

一个样本的误差:yi^ - yi 

找到误差最小的时刻,为了去找到误差最小的时刻,需要反复尝试,a,b根据最小二乘法去求得误差反过来误差最小时刻的a,b就是最终最优解模型

多元线性回归
  本质上就是算法(公式)变换为了多元一次方程组 
  y = w1*x1 + w2*x2 + w3*x3 + ... + wn*xn + w0*x0

总结问题
1、为什么求总似然的时候,要用正太分布的概率密度函数?
  根据中心极限定理,如果假设样本之间是独立事件,误差变量随机产生,那么就服从正太分布

2、总似然不是概率相乘吗?为什么用了概率密度函数的f(xi)进行了相乘?
  因为概率不好求,所以当我们可以找到概率密度相乘最大的时候,就相当于找到了概率相乘最大的时候

3、概率为什么不好求?
  因为求得是面积,需要积分,麻烦

4、总似然最大和最优解得关系?
  当我们找到可以使得总似然最大的条件,也就是可以找到我们的DataSet数据集最吻合某个正太分布
  即找到了最优解

 

通过最大似然估计得思想,利用了正太分布的概率密度函数,推导出来了损失函数

1、何为损失函数?
  一个函数最小,就对应了模型是最优解!预测历史数据可以最准!

2、线性回归的损失函数是什么?
  最小二乘法,MSE,mean squared error,平方均值损失函数,均方误差

3、线性回归的损失函数有哪些假设?
  样本独立,随机变量,正太分布

通过对损失函数求导,来找到最小值,求出theta的最优解

代码如下:

sklearn方法:

 1 import numpy as np
 2 from sklearn.linear_model import LinearRegression
 3 
 4 X = 2 * np.random.rand(100, 1)
 5 y = 4 + 3 * X + np.random.randn(100, 1)
 6 
 7 lin_reg = LinearRegression()
 8 lin_reg.fit(X, y)  # 训练 求解模型
 9 print(lin_reg.intercept_, lin_reg.coef_)
10 
11 X_new = np.array([[0], [2]])
12 print(lin_reg.predict(X_new))

 

原始求解方法:

 1 import numpy as np
 2 import matplotlib.pyplot as plt
 3 
 4 # rand均匀分布 随机x维度x1 返回一个均匀分布的随机数据
 5 X = 2 * np.random.rand(100, 1)  # 100行1列的均匀分布数据  0-1之间  *2
 6 # 人为设置真实的Y一列,randn 是标准正太分布,真实的y=预测的y+误差
 7 # 4和3是模型  3=w1 4=w0
 8 y = 4 * 1 + 3 * X + np.random.randn(100, 1)  # 100行1列的标准正态分布数据(误差)
 9 # 记! 解析解 =(X^T X)^-1 X^T y
10 
11 # 整合X0和X1
12 X_b = np.c_[np.ones((100, 1)), X]  # c_ 是combine整合
13 # print(X_b)
14 
15 # 常规等式求解theta   linalg线性代数  inv求逆
16 theta_best = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y)
17 # print(theta_best)
18 
19 # 创建测试集里面的X1
20 X_new = np.array([[0], [2]])
21 X_new_b = np.c_[(np.ones((2, 1))), X_new]
22 print(X_new_b)
23 y_predict = X_new_b.dot(theta_best)
24 print(y_predict)
25 
26 plt.plot(X_new, y_predict, 'r-')
27 plt.plot(X, y, 'b.')
28 plt.axis([0, 2, 0, 15])
29 plt.show()
posted @ 2020-03-04 18:02  ZzUuOo666  阅读(432)  评论(0编辑  收藏  举报