DC's blog DC's blog
首页
  • 计算机基础
  • linux基础
  • mysql
  • git
  • 数据结构与算法
  • axure
  • english
  • docker
  • opp
  • oop
  • 网络并发编程
  • 不基础的py基础
  • 设计模式
  • html
  • css
  • javascript
  • jquery
  • UI
  • 第一次学vue
  • 第二次学vue
  • Django
  • drf
  • drf_re
  • 温故知新
  • flask
  • 前后端不分离

    • BBS
    • 订单系统
    • CRM
  • 前后端部分分离

    • pear-admin-flask
    • pear-admin-django
  • 前后端分离

    • 供应链系统
  • 理论基础
  • py数据分析包
  • 机器学习
  • 深度学习
  • 华中科大的网课
  • cursor
  • deepseek
  • 杂文
  • 罗老师语录
  • 关于我

    • me
  • 分类
  • 归档
GitHub (opens new window)

DC

愿我一生欢喜,不为世俗所及.
首页
  • 计算机基础
  • linux基础
  • mysql
  • git
  • 数据结构与算法
  • axure
  • english
  • docker
  • opp
  • oop
  • 网络并发编程
  • 不基础的py基础
  • 设计模式
  • html
  • css
  • javascript
  • jquery
  • UI
  • 第一次学vue
  • 第二次学vue
  • Django
  • drf
  • drf_re
  • 温故知新
  • flask
  • 前后端不分离

    • BBS
    • 订单系统
    • CRM
  • 前后端部分分离

    • pear-admin-flask
    • pear-admin-django
  • 前后端分离

    • 供应链系统
  • 理论基础
  • py数据分析包
  • 机器学习
  • 深度学习
  • 华中科大的网课
  • cursor
  • deepseek
  • 杂文
  • 罗老师语录
  • 关于我

    • me
  • 分类
  • 归档
GitHub (opens new window)
  • 理论基础

  • Py数据分析包

  • 机器学习

    • From - 波sir

    • From - 梗直哥

      • 开篇
      • KNN算法
      • 线性算法
        • KNN与线性算法对比
        • 核心思想和原理
          • 一元线性回归
          • 多元线性回归
          • 多项式回归
          • 逻辑回归
          • 多项式逻辑回归
        • 一元和多元算法实现
          • 一元线性回归代码
          • 多元线性回归代码
        • MSE、RMAE、MAE、R^2
        • 多项式回归代码实现
        • 逻辑回归算法
  • 深度学习

  • 华中科大的网课

  • AI
  • 机器学习
  • From - 梗直哥
DC
2024-10-09
目录

线性算法


# KNN与线性算法对比

image-20241010091735165

KNN和线性算法都可用于分类任务和回归任务.
★ 但KNN更关注空间位置关系 So,KNN更擅长分类; 线性算法更强调时间或逻辑上的先后关系, So, 线性算法更擅长回归!


# 核心思想和原理

  • ★ 关于民主投票的策略
    • KNN - 是点到点的距离 - 找K个近邻点 - 线性,类别; 回归,均值
    • 一元、多元、多项式 - 都可化简为找到二维坐标中的一条最优线(直线、曲线), 是点到线的距离
    • 逻辑回归 (处理二分类问题) - 也是找最优线, 本质上也是距离, 该距离是实际值和真实值之间的差异, 是一个概率值!
  • ★ 线性算法对应方程的最优解
    • 距离就是误差
    • 一元、多元、多项式的方程都能写出来, 将其通过数学方法"线性代数、变量替换" 化简 映射到二维坐标系中后
      代入 评判标准/损失函数 ∑i=1m(yi−y^i)2 中, 再通过数学方法"最小二乘法" 可得到最优解.. 它们的最优解是方程..
    • 逻辑回归的方程的含义是概率, 其对应的 评判标准/损失函数 是一个log函数.. 其最优解只能通过梯度下降求得..

# 一元线性回归

image-20241010093109686

一元线性回归 找到一条线 其方程是 y^=kx+b , 我们要找最优的那条直线.. 就得知道最优时的k值和b值..
何为最优? 评判标准是 ∑i=1m(yi−y^i)2 的值最小时 , 将 y^ 代入, 可得到 目标函数/损失函数. ∑i=1m(yi−kxi−b)2
数学家们通过 最小二乘法, 求得了一元回归方程的最优解/目标函数的最小值.. 其k和b都可用公式来表示!!

$ k = \frac{\sum_{i=1}^{m} (x_i - \bar{x})(y_i - \bar{y})}{\sum_{i=1}^{m} (x_i^2 - \bar{x})} $ b=y¯−kx¯

# 多元线性回归

image-20241010102753363

假如有两维特征,那么就得在 三维坐标里展示,从正方形的上面往下看,可将空间中的这些数据点映射到一个二维坐标中..
该过程是通过线性代数实现的..通过数学转化,多元线性回归 找到的那条线的方程 就是 Y=XWT

注意,在该二维坐标中横坐标x的含义 - 一元线性回归里是一个值,多元回归里就变成了一个向量啦. eg: [1,x1,x2,x3,…,xn]

同理,需找的映射的这个二维坐标中,最优的那条线..
将方程Y=XWT代入 评判标准. 数学家通过最小二乘法,可求得多元回归方程的最优解: w=(XTX)−1XTy

# 多项式回归

image-20241010104433691

多项式回归, 通过变量替换, 其方程的样子就变成了 多元线性回归的方程..

★ 多项式回归的本质是为原来的样本添加一些特征, 即升维, 而这些特征是原来特征的多项式项. eg: x1是x^2..
通过添加特征后,就可用线性回归的思路来进行拟合!!

# 逻辑回归

  • 逻辑回归干的是二分类的活, 为何会跟一元、多元、多项式放在一起理解? 你这样理解:
    所谓的分类, 即这些数据点多大概率上是属于同一类别.. 概率意味着是连续的值, 因而 分类问题也就转化成了回归问题..
  • 逻辑回归本质上也是找线, 但关注点 不是让这条线去拟合这些数据点/不是让数据多尽量在这条线上.
    而是让这些数据点尽量的在这条线的两边..

◎ 先来看看逻辑回归的方程

image-20241010114855769

◎ 再来看看逻辑回归的 目标函数/损失函数

image-20241010120258318

求解该目标函数/损失函数的w,不能像前面一样得到一个公式了, 需要用到梯度下降法逐步优化来找的最优解..

# 多项式逻辑回归

image-20241010121620361


# 一元和多元算法实现

# 一元线性回归代码

image-20241010140508107

"""
数据集准备以及切分数据集
"""
import numpy as np
import matplotlib.pyplot as plt
import warnings
from sklearn import datasets

warnings.filterwarnings("ignore")

boston = datasets.load_boston()  # 房价预测数据集
boston.keys(),boston.data.shape,boston.feature_names

x = boston.data[:,5]  # 拿到每个住宅的房间数 
y = boston.target

# 简单的对数据进行了一个处理.不用在意.
x = x[y<50]
y = y[y<50]

plt.scatter(x,y)
plt.show()

from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.3, random_state = 0)


"""
手动实现一元线性回归的公式,根据公式得到 k和b
"""
def fit(x, y):
    a_up = np.sum((x-np.mean(x))*(y - np.mean(y)))
    a_bottom = np.sum((x-np.mean(x))**2)
    a = a_up / a_bottom
    b = np.mean(y) - a * np.mean(x)
    return a, b
  
a, b = fit(x_train, y_train)
a, b

# 在训练集上拟合出这条直线是肯定的,因为这条直线就是通过训练集得到的嘛
plt.scatter(x_train, y_train)
plt.plot(x_train, a*x_train+ b, c='r')
plt.show()

# 看这条线在测试集上的表现,也能很好的拟合数据集
# 从现实意义来说,房屋价格随着房间的增加而增加也是符合常识的!
plt.scatter(x_test, y_test)
plt.plot(x_test, a*x_test+ b, c='r')
plt.show()

"""
使用sklearn 调库来实现一元线性回归!
"""
"""lin_reg.fit  lin_reg.predict  lin_reg.score 的第一个参数都得是矩阵!!"""
from sklearn.linear_model import LinearRegression
lin_reg = LinearRegression()
lin_reg.fit(x_train.reshape(-1,1), y_train)  # 通过fit函数传入训练集数据得到模型,注意,reshape将一元的特征数据变成矩阵
y_predict = lin_reg.predict(x_test.reshape(-1,1))  # 将测试集的特征数据传入模型中进行预测
y_predict[:5]

plt.scatter(x_test, y_test)  # 测试集数据的散点 x一样!
plt.plot(x_test, y_predict, c='r')  # 拟合出来的线 x一样!
plt.show()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64

# 多元线性回归代码

image-20241010141056942

★ 注意:多元线性回归是不需要进行归一化操作的!!因为多元线性回归学习的就是每一个特征的权重..

"""
数据集准备以及切分数据集
"""
import numpy as np
import matplotlib.pyplot as plt
import warnings
from sklearn import datasets

warnings.filterwarnings("ignore")

boston = datasets.load_boston()  # 房价预测数据集
boston.keys(),boston.data.shape,boston.feature_names

x = boston.data
y = boston.target

# 简单的对数据进行了一个处理.不用在意.
x = x[y<50]
y = y[y<50]

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.3, random_state = 0)

"""
使用sklearn 调库来实现多元线性回归!
"""
from sklearn.linear_model import LinearRegression
lin_reg = LinearRegression()
lin_reg.fit(x_train, y_train)
# 多元线性回归没办法画图看拟合效果好不好,无伤大雅,可以调用score方法得到模型的得分,进而判断模型的效果如何
lin_reg.score(x_test, y_test)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

# MSE、RMAE、MAE、R^2

image-20241010142105228

"""
模型评估
"""
y_real = y_test

"""MSE"""
mse = np.sum((y_real - y_predict) ** 2) / len(y_test)
mse

from sklearn.metrics import mean_squared_error
mean_squared_error(y_real, y_predict)


"""RMSE"""
rmse = np.sqrt(mse)
rmse

from sklearn.metrics import mean_squared_error
mean_squared_error(y_real, y_predict, squared=False)


"""MAE"""
mae = np.sum(np.abs(y_real - y_predict)) / len(y_test)
mae

from sklearn.metrics import mean_absolute_error
mean_absolute_error(y_real, y_predict)


"""R^2"""
r2 = 1 - (np.sum((y_real - y_predict) ** 2)) / (np.sum((y_real - np.mean(y_real)) ** 2))
r2

1 - mse / np.var(y_real)

from sklearn.metrics import r2_score
r2_score(y_real, y_predict)

model.score(x_test, y_test)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39

# 多项式回归代码实现


1

# 逻辑回归算法

KNN算法
深度学习基础

← KNN算法 深度学习基础→

最近更新
01
deepseek本地部署+知识库
02-17
02
实操-微信小程序
02-14
03
教学-cursor深度探讨
02-13
更多文章>
Theme by Vdoing | Copyright © 2023-2025 DC | One Piece
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式