机器学习 jupyter Python 线性回归

1 线性回归的宗旨寻找曲线

回归的目的是预测数值型的目标值。最直接的办法是依据输入写出一个目标值的计算公式。
假如你想要预测的房价,可能会这么计算:y(房价),x(房价大小)
在这里插入图片描述

这就是所谓的回归方程(regression equation),其中的1000和200称作回归系数(regression weights),求这些回归系数的过程就是回归。一旦有了这些回归系数,再给定输入,做预测就非常容易了。
具体的做法是用回归系数乘以输入值,再将结果全部加在一起,就得到了预测值。

2 表达式

一元线性回归表达式:
在这里插入图片描述
多元线性回归表达式:
在这里插入图片描述

3 图示说明

对给定的样本点用直线(平面)进行拟合,求解最佳直线(平面)的过程,就是求解回归方程的过程。
下面是一元线性回归例子的图:
在这里插入图片描述

下面是多元线性回归例子的图:
在这里插入图片描述
注:多元线性回归在图上最多只有三维。

4 总结

根据已知样本点求解回归系数。(系数确定,回归方程也就确定)。求这些回归系数的过程就是回归。
如何判断该直线是最佳直线呢?
答:用代价函数寻找最佳直线。

5 线性回归的代价函数

就是用最小二乘法算出拟合的线性函数。

5.1 最小二乘法

5.1.1 最小二乘法的思想

最小二乘法的思想:
最小二乘法则是一种统计学习优化技术.
它的目标是最小化误差( error=𝑦−ℎ𝜃 (𝑥))平方之和,从而找到最优模型,这个模型可以拟合(fit)观察数据。
机器学习中回归学习最常用的损失函数是平方损失函数,在此情况下,回归问题可以用著名的最小二乘法来解决。最小二乘法就是曲线拟合的一种解决方法。

5.1.2 最小二乘法的分类

线性最小二乘法
在这里插入图片描述
非线性最小二乘法(ℎ𝜃 (𝑥)不能表示成上述形式,即不是𝑥的线性函数)
注:非线性的经常需要数值方法来求解。比如:随机梯度下降或者牛顿法等。当然,随机梯度下降也可以解决线性问题。

5.1.3 最小二乘法目标公式

在这里插入图片描述
最小二乘法的目标就是最小化公式(1)。 ℎ𝜃 (𝑥 ^ ((𝑖) ) ) 是预测值, 𝑦^((𝑖))是真实值。 通俗来讲,就是使得真实值和预测值(拟合值,模型给出)之间的距离平方和最小化。

5.1.4 最小二乘法的求解方法

在这里插入图片描述
方法一的注意点:
要求矩阵(𝑥^𝑇 𝑥)是可逆的,矩阵可逆的充要条件。
注:(矩阵可逆的充要条件)
A是可逆矩阵的充分必要条件是∣A∣≠0,即可逆矩阵就是非奇异矩阵。(当∣A∣=0时,A称为奇异矩阵)。
numpy.linalg模块包含线性代数的函数。使用这个模块,可以计算逆矩阵、求特征值、解线性方程组以及求解行列式等。
在这里插入图片描述

5.1.5 ws的推导过程

在这里插入图片描述
注:
在这里插入图片描述

5.1.6 总结
对于某些线性回归问题,采用标准方程法而不是梯度下降法(迭代)求解θ,因为标准方程法会更加快捷方便。

6 案列1

对下列数据集进行线性回归。
在这里插入图片描述

6.1 方法一:

6.1.1 画出散点图

'''
案列1
'''
import matplotlib.pyplot as plt
import numpy as np
np.set_printoptions(suppress=True)#显示的数字不是以科学记数法显示
dataSet=np.genfromtxt('ex0.txt')#读取数据
x_data=dataSet[:,:-1]#读取除了最后一列以外的数据
y_data=dataSet[:,-1]#只读取最后一列的数据
def plot():#定义画图函数
    plt.scatter(x_data[:,1],y_data,c='blue',s=10)
    #将第二列的数据当做x轴,最后一列的数据当做y轴,点的颜色为蓝色,大小为10
    '''
    因为sklearn里面的线性回归,会对数据自己添加偏置项,数据本身有偏置项,所以
    只读取第二列
    '''
    plt.xlabel('X')
    plt.ylabel('Y')
plot()#调用函数
plt.show()#画出图像

在这里插入图片描述

from sklearn.linear_model import LinearRegression#从sklearn中导入线性回归的包
LR=LinearRegression()#简写
XData=x_data[:,1,np.newaxis]#加入新的维度
'''
注1:
model.fit(x,y)#x即特征数据永远是二维的
model.predit(x)#x即特征数据永远是二维的

'''
LR.fit(XData,y_data)
print(LR.coef_)#打印回归方程的系数
print(LR.intercept_)#打印截距
print(LR.score(XData,y_data))#打印相关系数R^2


在这里插入图片描述

6.1.2 算ws,即系数和截距

ws=np.zeros((2,1))#将系数和截距转化为数组
ws[0]=LR.intercept_#将系数当作ws的第一个元素
ws[1]=LR.coef_#将截距当作ws的第二个元素
print(ws)
#print(x_data)
yHat=np.mat(x_data)*ws#先将x_data转化为矩阵,两矩阵相乘,才可以得到预测函数的形式
plot()#画出散点图
plt.plot(x_data[:,1],yHat,'r')#plot画出直线
plt.show()#show()把图显示出来

在这里插入图片描述

6.2 方法二:

自己算ws

6.2.1 导入包和数据,画出散点图

import numpy as np
import matplotlib.pyplot as plt
dataSet=np.genfromtxt('ex0.txt')
x_data=dataSet[:,:-1]
y_data=dataSet[:,-1]
def plot():
    plt.scatter(x_data[:,1],y_data)#scatter函数是画点的
plot()
plt.show()
# print(x_data)

运行结果:
在这里插入图片描述

6.2.2 定义函数,算出ws

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)

运行结果:
在这里插入图片描述

6.2.3 写出拟合直线的函数,并画在散点上

#根据回归方程,画出拟合直线
#预测值:y=kx+b的形式
yHat=x_data*ws
plt.plot(x_data[:,1],yHat,c='r')#plot(x,y),plot函数是画直线
plot()
plt.show()

运行结果:
在这里插入图片描述

6.2.4 总结

算ws,可以和高中的y=kx+b进行类比,方便理解。

7 线性回归和Logistic回归对比

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

8 局部加权线性回归

线性回归的一个问题是有可能出现欠拟合现象,因为它求的是具有最小均方误差的无偏估计。显而易见,如果模型欠拟合将不能取得最好的预测效果。所以有些方法允许在估计中引入一些偏差,从而降低预测的均方误差。

8.1 局部加权线性回归算法的原理

为了解决以上问题,提出的一个方法是局部加权线性回归(Locally Weighted Linear Regression,LWLR)。在该算法中,我们给待预测点附近的每个点赋予一定的权重;
该算法解出回归系数w的形式如下:
在这里插入图片描述
其中𝑊是一个矩阵,用来给每一点赋予权值。
LWLR使用“核”(与支持向量机中的核类似)来对附近的点赋予更高的权重①。核的类型可以自由选择,最常用的核就是高斯核,高斯核对应的权重如下:
在这里插入图片描述

8.2易错点

记得给横坐标的值进行重新排序,不然画出来的图会错乱不堪。

在这里插入图片描述
在这里插入图片描述

8.3𝑹^𝟐决定系数

在这里插入图片描述

  • 3
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
多元线性回归分析是一种统计方法,用于研究多个自变量与一个连续性目标变量之间的关系。在多元线性回归中,我们可以使用多个自变量来预测目标变量的值。多元线性回归的基本原理和计算过程与一元线性回归相似,但由于自变量的个数增加,计算变得更加复杂,通常需要借助统计软件进行计算。选择合适的自变量是进行多元回归预测的重要前提之一,可以利用变量之间的相关矩阵来解决自变量的选择问题。\[2\] 在Jupyter中进行多元线性回归分析,你可以使用Python的统计库(如statsmodels或scikit-learn)来实现。首先,你需要准备好包含自变量和目标变量的数据集。然后,你可以使用适当的函数或类来拟合多元线性回归模型,并获取回归系数和其他统计信息。最后,你可以使用模型来进行预测和分析。具体的步骤和代码实现可以根据你的具体需求和数据集来进行调整。 #### 引用[.reference_title] - *1* *3* [机器学习 jupyter Python 线性回归(自己写的算法)](https://blog.csdn.net/qq_45059457/article/details/106039860)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [jupyter多元线性回归算法预测房价](https://blog.csdn.net/weixin_46129506/article/details/120954412)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值