老高的苦难学习经历

Good good study, day day up!

文章

15

标签

0

评论

12

文章目录

数据统计

成立

195天

文章

15篇

评论

12条

标签

0个

最近文章

自己理解的所谓算法02(线性回归)

对象的线性回归

sklearn.linear_model (所有关于线性模型的内容都放到了这个模块下。)
训练集 - 验证集 - 测试集、
import sklearn.linear_model as lm
import sklearn.model_selection as ms
import pandas as pd
import sklearn.metrics as sm
import pickle

data = pd.read_csv('Salary_data.csv')


x = data.iloc[:,:-1]
y = data.iloc[:,-1]

model = lm.LinearRegression()

train_x,test_x,train_y,test_y = ms.train_test_split(x,y,test_size=0.1,random_state=7)

model.fit(train_x,train_y)

pred_test_y = model.predict(test_x)


print(f'平均绝对误差:{sm.mean_absolute_error(test_y,pred_test_y)}')
print(f'平均平方误差:{sm.mean_squared_error(test_y,pred_test_y)}')
print(f'中位数绝对误差:{sm.mean_absolute_error(test_y,pred_test_y)}')
print(f'平均得分:{sm.r2_score(test_y,pred_test_y)}')


with open('./demo1.pkl','wb') as f:
    pickle.dump(model,f)

线性模型概述

?什么叫线性模型

线性模型是我们自然界中最简单的模型之一,他描述了一个或多个自变量对另一个因变量的影响是呈简单的比例,线性关系.

线性回归

y = w * x + b
是要根据一组输入值或输出值(称为样本),寻找一个线性模型,能在最佳成都上拟合于给定的数值分布,从而再给定新的输入时预测输出.

损失函数(Loss)

损失函数的作用:
能够去评估当前模型针对全部样本,预测的准还是不准.损失函数越大,证明越不准.越小越准.
这玩应有点像计算错误的一把尺,老师课上的公式我是一句没听懂.但大概意思应该就是这么个道理.

梯度损失

打个比方,吴老师儿子估分680,实际分数是650,损失就是 680-650=30
也就是有30分的误差,公式就是 损失=(估分 - 实际分数)²
损失=(680-w)²
这里为啥是平方呢?AI说是 万一是负数呢,要保证都是正数的话,就用平方,所以这个平方是必须的

那什么是梯度呢?
估高了,那就每次往下降一点,再降一点. 那怎么知道是降低还是升高估值呢?这就是梯度
然后每次估分后再算一下差多少.
还是用这个公式 损失=(680-w)²
看到与正确值越来越接近,就说明估分越来越合理.

学习率又是啥呢?
类似于他知道自己估高了,但不知道估高了,那就要往下降一点,但不可能一下子就直接降30分,所以要一点点降。
这玩应就是学习率.估一下太高,估一下太低,老是来回蹦,不容易收敛。这种情况叫:震荡!
说人话就是 一步步修正估分的过程

下面是AI给的例子

# 多人估分AI —— 拟合一条线 w*x 接近多个实际成绩
import numpy as np
# 输入:每个人的复习时间(小时)
x = np.array([2, 4, 6])
# 输出:每个人的真实成绩
y = np.array([10, 20, 30])
# 初始猜测 w
w = 1.0
# 学习率
lr = 0.01
# 训练迭代次数
for i in range(30):
    # 预测分(每个人都乘以 w)
    pred = w * x
    # 损失函数(平方差)
    loss = ((pred - y) ** 2).mean()
    # 梯度(误差 × x,然后取平均)
    grad = 2 * ((pred - y) * x).mean()
    # 梯度下降更新 w
    w = w - lr * grad
    print(f"第{i+1}次:w = {w:.4f},损失 = {loss:.4f}")

课上补充

必须了解矩阵相乘(矩阵相乘的前提:必须是A的列和B的行数相等,才能相乘,查看数组的.shape)
123行,6列 * 6列,789行 得出来的结果是 123行,789列的二维数组
一行三列的 * 一行三列的,可以把第二个数组进行转至(.T),转置成 3行1列,再相乘,结果是一行一列。
2025-06-26T02:38:15.png

练习

求损失函数的极小值
多练几次矩阵相乘

自己理解的所谓算法02(线性回归)

发布于

June 26, 2025

分类

所谓算法

版权协议

MIT

评论
正在回复评论:* * * Claim Free iPhone 16: https://www.motorolapromociones2.com/index.php?y6c21b * * * hs=82d7d114c599d5be0190f47162e1683f* ххх* 的评论 取消
😀

感谢支持!

微信二维码

请使用微信扫描二维码打赏。

支付宝二维码

请使用支付宝扫描二维码打赏。