机器学习-P2 线性回归实战(书P136)

这篇博客详细介绍了线性回归的原理,包括简单线性回归、多元线性回归和损失函数,并探讨了相关系数的计算及其意义。接着,作者讲解了局部加权线性回归,通过不同k值的高斯核影响,展示了如何选择最佳k值以减少误差平方和(SSE)。最后,应用这些方法预测鲍鱼的年龄,通过数据预览、训练集划分和误差评估来确定最佳模型。
摘要由CSDN通过智能技术生成

线性回归(原理)

1,简单线性回归

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

2,多元线性回归

在这里插入图片描述

3,线性回归损失函数

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

一,会用到的库

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 在 notebook 里,要设置下面两行才能显示中文
plt.rcParams['font.family'] = ['sans-serif']
# 如果是在 PyCharm 里,只要下面一行,上面的一行可以删除
plt.rcParams['font.sans-serif'] = ['SimHei']

二,使用pandas读取数据

ex0 = pd.read_table('D:\Python\pycharm\机器学习\线性回归\实战—书\Data.txt',header=None)
# 预览前5行
ex0.head()
>>>
0	1	            2
0	1.0	0.067732	3.176513
1	1.0	0.427810	3.816464
2	1.0	0.995731	4.550095
3	1.0	0.738336	4.256571
4	1.0	0.981083	4.560815

三,辅助函数

1,从文档中获取数据

def get_Mat(dataset):
    xMat = np.mat(dataset.iloc[:,:-1].values)
    yMat = np.mat(dataset.iloc[:,-1].values).T
    return xMat,yMat
xMat, yMat = get_Mat(ex0)

2,数据分布可视化

def plotShow(dataset):
    xMat, yMat = get_Mat(dataset)
    """Mat.A 表示:从matric格式转化为array格式"""
    plt.scatter(xMat.A[:,1],yMat.A,c='b',s=5)
    plt.show()
plotShow(ex0)

在这里插入图片描述

3,计算回归系数

xMat的第一列应该都为 1,这列对应截距

def standRegres(dataset):
    xMat,yMat = get_Mat(dataset)
    """Mat.T 为转置矩阵:沿对角线翻折"""
    xTx = xMat.T * xMat
    """np.linalg.det(M)计算行列式:|M|"""
    if np.linalg.det(xTx) == 0:
        print('矩阵为奇异矩阵,无法求逆')
        return
    """Mat.I 求逆矩阵"""
    ws = xTx.I * (xMat.T * yMat)
    return ws
ws = standRegres(ex0)
ws
>>>matrix([[3.00774324],
           [1.69532264]])

4,回归线的可视化

def plotReg(dataset):
    xMat,yMat = get_Mat(dataset)
    plt.scatter(xMat.A[:,1],yMat.A,c='b',s=5)
    ws = standRegres(dataset)
    """矩阵乘法是有顺序的!!!"""
    """xMat(200,2) * ws(2,1) = yHat(200,1)"""
    yHat = xMat * ws
    plt.plot(xMat[:,1],yHat,c='r')
    plt.show()

在这里插入图片描述

4,计算相关系数

yHat为预测结果
yMat为真值

**Px,y = Cov(X,Y) / (Var[X] * Var[Y])0.5
性质:
1,可以表征x和y之间线性关系紧密程度的量
2,越大,相关程度越大(=0时最低)
3,若X和Y不相关,Px,y=0,通常认为X和Y之间不存在线性关系
4,若X和Y独立,则必有Px,y=0,因而X和Y不相关;
5,若X和Y不相关,则仅仅是不存在线性关系,可能存在其他关系,如x2+y2=1,X和Y不独立。
6,因此,“不相关”是一个比“独立”要弱的概念。

xMat,yMat = get_Mat(ex0)
ws = standRegres(ex0)
yHat = xMat * ws
np.corrcoef(yHat.T, yMat.T)#保证两个都是行向量
>>>array([[1.        , 0.98647356],
          [0.98647356, 1.        ]])

四,局部加权线性回归

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

1,不同k值对应的高斯核

xMat,yMat = get_Mat(ex0)
x = 0.5
xi = np.arange(0,1.0,0.01)
# k 平滑参数
k1,k2,k3 = 0.5,0.1,0.01
# 不同k值所计算的权重(高斯核)
w1 = np.exp((xi-x)**2/(-2*k1**2))
w2 = np.exp((xi-x)**2/(-2*k2**2))
w3 = np.exp((xi-x
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值