机器学习-线性回归

电玩女神 2022-05-10 09:14 491阅读 0赞

基本概念

在线性模型中通过一个线性组合进行预测, 由W和b根据x得到f(x)的值

即: f(x)=w\_\{1\}x\_\{1\}+w\_\{2\}x\_\{2\}+...+w\_\{n\}x\_\{n\}+b

或者写为: f(x)= \\overrightarrow\{W\}^\{T\}\\overrightarrow\{x\}+b

线性回归就是为了学得w和b的值, 然后进行回归预测

相关公式

利用最小二乘法可以得到

w=\\frac\{\\sum\_\{i=1\}^\{m\} y\_\{i\}(x\_\{i\}-\\overline\{x\})\}\{\\sum\_\{i=1\}^\{m\}x\_\{i\}^\{2\}-\\frac\{1\}\{m\}(\\sum\_\{i=1\}^\{m\}x\_\{i\})^\{2\}\}

b=\\frac\{1\}\{m\}\\sum\_\{i=1\}^\{m\}(y\_\{i\}-wx\_\{i\})

进一步转化:

将w和b合写在一起 \\hat\{w\}=\\\{w;b\\\} 矩阵X在最右边添上一列1

回归方程可以改写为y=f(X)=\\hat\{w\}^\{T\}X

使用方差来估计误差

方差为 gif.latex\\sum\_\{i=1\}^\{m\}(y\_\{i\}-x\_\{i\}^\{T\}\\hat\{w\})^\{2\} 也可以写作 (y-X\\hat\{w\})^\{T\}(y-X\\hat\{w\})

由于上式为一个凸函数(下凸), 所以对w求导令上式为零可得误差取极小值时的\\hat\{w\}

\\hat\{w\}=(X^\{T\}X)^\{-1\}X^\{T\}y

最终可得线性回归模型为 f(\\hat\{x\_\{i\}\})=\\hat\{x\_\{i\}\}^\{T\}(X^\{T\}X)^\{-1\}X^\{T\}y

具体代码实现

仅利用numpy实现

首先生成一些近似于线性的数据用于测试

  1. import numpy as np
  2. np.random.seed(42)
  3. x=2*np.random.rand(100,1)#从均匀分布中抽取样本
  4. y=4+3*x+np.random.randn(100,1)#从均值0方差1的正态分布中抽取样本
  5. import matplotlib.pyplot as plt
  6. plt.plot(x,y,'o',color='black')

70

计算\\hat\{w\}
其中X需要再加上一行1, 以便于生成\\hat\{w\}

  1. X_b=np.c_[np.ones((100,1)),x]#向X矩阵添加一 1
  2. w_best=np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y)
  3. w_best

array([[4.21509616], [2.77011339]])

  1. X_new=np.array([[0],[2]])
  2. X_new_b=np.c_[np.ones((2,1)),X_new]
  3. y_predict=X_new_b.dot(w_best)
  4. y_predict

array([[4.21509616], [9.75532293]])

  1. plt.plot(X_new,y_predict,'r-',label='predict')#r代表红色, -代表将两点连成线
  2. plt.plot(x,y,'b.',label='scatter')#b代表蓝色, .代表散点图
  3. plt.axis([0,2,0,15])#控制横纵轴范围, 横轴为02, 纵轴015
  4. plt.xlabel('x')
  5. plt.ylabel('y')
  6. plt.title('Linear Regression')
  7. plt.legend()

70 1

利用sklearn实现

  1. from sklearn.linear_model import LinearRegression
  2. lr=LinearRegression().fit(x,y)
  3. lr.intercept_, lr.coef_

(array([4.21509616]), array([[2.77011339]]))

构建test set ,X设置为0和2, Y为predict值
不再需要自己构建w_best
y_predict直接使用LinearRegression().predict()得到

  1. X_new=np.array([[0],[2]])
  2. print(lr.predict(X_new))#y_predict
  3. plt.plot(X_new,lr.predict(X_new),'r-',label='predict')
  4. plt.plot(x,y,'b.',label='scatter')
  5. plt.show()

[[4.21509616] [9.75532293]]

70 2

可以通过corcoef的命令来计算预测值和真实值直接的相关性
但是必须保证两个向量都是行向量

  1. yHat=X_b.dot(w_best)
  2. #print(yHat)
  3. #print(y)
  4. print(np.corrcoef(yHat.T,y.T))#要保证两个向量都是行向量

[[1. 0.8770824] [0.8770824 1. ]]

正对角线上的是自己跟自己的相关系数, 所以是1
而反对角线上的就是预测值和实际值之间的相关系数, 比较接近1

发表评论

表情:
评论列表 (有 0 条评论,491人围观)

还没有评论,来说两句吧...

相关阅读

    相关 机器学习 --- 线性回归

    线性回归是属于机器学习里面的监督学习,与分类问题不同的是,在回归问题中,其目标是通过对训练样本的学习,得到从样本特征到样本标签直接的映射,其中,在回归问题中,样本的标签是连续值

    相关 机器学习线性回归

    花了2天时间看了吴恩达老师的机器学习算法的第一章,收获很多,在网易云课堂上可看,虽然是英文版的,且偏向于理论,故在此记录下学习收获和代码实现。 1.y=kx+b的线性回归

    相关 机器学习线性回归

    单变量线性回归 说到机器学习的话,很多人首先会想到的是单变量的线性回归,好像大家高中的时候都学过。很多人不理解,这种线性回归的东西跟机器学习有什么关系。 其实单变量的话

    相关 机器学习_线性回归

    这学期打算把机器学习和深度学习 什么是回归算法 1. 回归算法是一种有监督算法(有一个x和y的对应关系) 2. 回归算法是一种比较常用的机器学习算法,用来建立“解释