机器学习 jupyter Python 线性回归(自己写的算法)

一、寻找最佳拟合曲线

线性回归的目的是预测数值型的目标值
对给定的样本点用直线(平面)进行拟合,求解最佳直线(平面)的过程,就是求解回归方程的过程。
图示说明:
1.一元线性回归
机器学习 jupyter Python 线性回归(自己写的算法)_第1张图片
2.二元线性回归
机器学习 jupyter Python 线性回归(自己写的算法)_第2张图片
例如:你想要预测的房价,可能会这么计算:y(房价),x(房价大小)
=1000+200∗
这就是所谓的回归方程(regression equation),其中的1000和200称作回归系数(regression weights)。
求这些回归系数的过程就是回归。一旦有了这些回归系数,再给定输入,做预测就非常容易了。
具体的做法是用回归系数乘以输入值,再将结果全部加在一起,就得到了预测值y。

二、常见的线性回归表达式

1.一元线性回归表达式
在这里插入图片描述
2.多元线性回归表达式
在这里插入图片描述
注:一元线性回归是特殊的多元线性回归
3.小结
<1>线性回归解决回归问题,即做出预测(目标变量是连续性问题)
<2>回归系数确定了,回归方程就确定了
<3>求回归系数的过程就是回归

三、线性回归代价函数

1.代价函数就是为了求最佳直线,需要运用最小二乘法求最佳函数
2.最小二乘法的思想
目标是最小化误差平方和,从而找到最优模型。
通俗来讲,就是使得真实值和预测值(拟合值,模型给出的)之间的距离平方和最小化。
注最小误差在这里插入图片描述
y为真实值,h(x)为预测值。
3.最小二乘法分为两类:
<1>.线性最小二乘法
在这里插入图片描述
<2>.非线性最小二乘法
经常使用数值方法来求解。数值方法包括:随机梯度下降或牛顿法等。
注:随机梯度下降也可以解决线性问题。
4.最小二乘法求解方法
<1>矩阵求导方法(标准方程法)
矩阵求导方法思想就是把目标函数划分为矩阵运算问题。

首先判断
在这里插入图片描述
是否为可逆矩阵。
如果可逆,将得到:
在这里插入图片描述
推导过程:
机器学习 jupyter Python 线性回归(自己写的算法)_第3张图片
注:1.numpy.linalg模块包含线性代数的函数。使用这个模块,可以计算逆矩阵、求特征值、解线性方程组以及求行列式。
2.在这里插入图片描述
<2>数值方法随机梯度下降(在逻辑回归部分求解回归方程就是使用该方法)
基本思路:对参数向量求导,使其梯度为0,然后得到参数变量的迭代更新公式
在这里插入图片描述
<3>数值方法牛顿法
利用泰勒公式展开,利用梯度和海塞矩阵进行迭代下降,速度很快。
在这里插入图片描述
变量以牛顿方法来下降。牛顿方向定义为:
在这里插入图片描述

四、和Logistic回归对比

逻辑回归处理分类问题,线性回归处理回归问题,这是两者的本质区别!

案列1:

第一列为偏置项,第二列为特征值(自变量)x,第三列为因变量y。
ex0.txt 部分数据:
机器学习 jupyter Python 线性回归(自己写的算法)_第4张图片

import numpy as np
import matplotlib.pyplot as plt

np.set_printoptions(threshold=np.inf)  #显示全部行列的内容
dataSet=np.genfromtxt('ex0.txt')
x_data=dataSet[:,:-1]
y_data=dataSet[:,-1]
def plot():
    plt.scatter(x_data[:,1],y_data)
plot()
plt.show()

机器学习 jupyter Python 线性回归(自己写的算法)_第5张图片

def standRegres(xArr,yArr):
    xMat=np.mat(xArr)
    yMat=np.mat(yArr).T
    xTx=xMat.T*xMat
    if np.linalg.det(xTx)==0.0:
        print('这个是矩阵是奇异矩阵,矩阵不可逆')
        return
    ws=(xTx).I*(xMat.T*yMat)
    return ws
ws=standRegres(x_data,y_data)
print(ws)

在这里插入图片描述

yHat=x_data*ws
plt.plot(x_data[:,1],yHat,c='r')
plot()
plt.show()

机器学习 jupyter Python 线性回归(自己写的算法)_第6张图片

案列总结:
1.用genfromtxt函数读取文件并划分为x_data,y_data,为了画关于x_data[1]和y_data的散点。
2.定义standRegres函数,先将数组转变为矩阵,方便运算;判断xTx是否为奇异矩阵,若是则进行 ws=(xTx).I*(xMat.T*yMat)
3.写出预测函数,画出直线。

注:想了解sklearn里面的线性回归点击这里

你可能感兴趣的:(#,机器学习,机器学习,python,线性代数)