一、机器学习介绍
1、什么是机器学习?
机器学习是实现人工智能的最主流方法。它涉及到算法和统计模型的使用,使得计算机系统能够从数据中“学习”和改进任务的执行,而不是通过明确的编程来实现。机器学习包括多种技术,如线性回归、支持向量机(SVM)、决策树等。
第十个月的工资:y0*1.19
把月份和工资数据输入计算机,计算机自动求解函数关系,再利用函数关系得到结果。不需要经验公式 .
机器学习是一种实现人工智能的方法。从数据中寻找规律、建立关系,根据建立的关系去解决问题。从数据中学习,实现自我优化升级。
机器学习的应用场景:
计算机视觉、自然语言处理、证券分析、医学诊断、机器人、DNA测序。。
2、实现机器学习的基本框架
将训练数据喂给计算机,计算机自动求解数据关系,在新的数据上做出预测或给出建议。
3、机器学习的类别
(1)、监督学习(Supervised Learning)
----训练数据包括正确的结果(标签-label)
根据给的正确结果找出边界,当再给出数据的时候,就可以进行归类。
监督学习
→线性回归
→逻辑回归
→决策树
→神经网络、卷积神经网络、循环神经网络
(2)、无监督学习(Unsupervised Learning)
----训练数据不包括正确的结果。(不会告诉正确的结果,即自己去寻找规律。)
无监督学习找不出边界,无监督学习里典型例子是聚类。聚类的目的在于把相似的东西聚在一起,而我们并不关心这一类是什么。因此,一个聚类算法通常只需要知道如何计算相似度就可以开始工作了。
无监督学习
→聚类算法
(3)、半监督学习(Semi-supervised Learning)
----训练数据包括少量正确的结果。
根据少量正确的结果也可以找出边界,从而实现自动分类。
混合学习
→监督学习+无监督学习
(4)、强化学习(Reinforcement Learning)
根据每次结果收获的奖惩进行学习,实现优化
程序初始化
→根据执行效果给与奖励/惩罚(分数)
→程序逐步寻找获得高分的方法
监督学习的应用场景是最多的。
二、机器学习-监督学习-线性回归
1、什么是回归分析?regression analysis
案例1:百万人口医生数量预测区域人均寿命
案例2:年龄预测身高
案例3:住宅面积预测售价
回归分析的定义:根据数据,确定两种或两种以上变量间相互依赖的定量关系
函数表达式:
回归分析的分类:
距离:房价=f(面积)
线性回归:回归分析中,变量与因变量存在线性关系
函数表达式:y=ax+b
举例:
线性回归:距离S=速度xt+S0
非线性回归:距离S=加速度xt2 +S0
1、确定P、A间的定量关系(重点)
P =f(A)
线性模型:y=ax+b,寻找合理的a和b
下面来看看不同的a和b对结果有什么影响
如何寻找到最合适的a和b?
y'=ax+b,即y'为模型输出结果,y为实际结果。
(1)、预测结果与实际结果之差的平方和最小
(2)、找到a和b让损失函数最小
其中红色点是真实的数据。蓝色和黑色是预测的值。
损失函数计算:
通过计算可知:y1'=0.5计算出的损失函数比y2'=-x+5的损失函数更小.
如何实现损失函数最小呢?
逐渐接近极小值点(p=2)
上面的梯度下降算法中p为自变量,函数为一个抛物线。这里g(a,b)为二元函数,a和b为自变量,函数图像是一个曲面,故需要对a和b同时进行梯度下降算法。
后面我们会用sklearn的线性回归来训练模型并求解a和b的值.
2、根据关系预测合理价格
P(A=110)=f(110)
3、做出判断(如果150万远大于P,则不值得投资,如果150万远小于P,则值得投资)
三、一元线性回归实战
Scikit-learn
它是Python语言中专门针对机器学习应用而发展起来的一款开源框架(算法库),可以实现数据预处理preprocessing、分类classification、回归regression、降维dimensionality reduction、模型选择model selection、聚类clustering等常用的机器学习算法。
特点:
(1)、集成了机器学习中各类成熟的算法,容易安装和使用,样例丰富,教程和文档也非常详细
(2)、不支持Python之外的语言,不支持深度学习和强化学习.
https://scikit-learn.org/stable/index.html
点击Regression
点击Generalized Linear Models,找到Ordinary Least Squares
from sklearn import linear_model reg = linear_model.LinearRegression() # 线性回归 reg.fit([[0, 0], [1, 1], [2, 2]], [0, 1, 2]) reg.coef_ reg.intercept_
a=reg.coef_
b=reg.intercept_
对新数据做预测:
predictions =reg.predict(x_new)
评估模型表现:
(1)、y与y'的均方误差(MSE):
与损失函数很像,除以2就是损失函数
(2)、R方值(R2)
MSE越小越好,R2分数越接近1越好
计算y与y'的均方误差(MSE)、R方值(R2 score):
from sklearn.metrics import mean_squared_error,r2_socre
MSE=mean_squared_error(y,y_predict)
R2 =r2_score(y,y_predict)
(3)、画图对比y与y',可视化模型表现:
from matplotlib import pyplot as plt plt.scatter(y,y')
MSE越小越好,R2分数越接近1越好
y'vs y集中度越高越好(越接近直线分布)
多张图同时展示
fig1 = plt.subplot(211) plt.scatter(x1,y1) fig2 = plt.subplot(212) plt.scatter(x2,y2)
其中211前面的2表示两行,中间的1表示1列,第三个1表示第一个
用Sklearn求解线性回归问题
寻找a和b(y=ax+b)
import numpy as np from sklearn import linear_model from sklearn.metrics import mean_squared_error,r2_score from matplotlib import pyplot as plt reg = linear_model.LinearRegression() X = np.array([[1], [2], [3], [4], [5], [6], [7], [8], [9], [10]]) # 特征值 y = np.array([7, 9, 11, 13, 15, 17, 19, 21, 23, 25]) # 目标值 reg.fit(X, y) print(reg.coef_) # a的值为2 print(reg.intercept_) # b的值为5,即y=2x+5 # reg.coef_ # reg.intercept_ predictions =reg.predict([[11], [12]]) print("新数据的预测值:", predictions) y_predictions =reg.predict([[1], [2], [3], [4], [5], [6], [7], [8], [9], [10]]) MSE=mean_squared_error(y,y_predictions) print("均方误差",MSE) R2 =r2_score(y,y_predictions) print("R方值",R2) plt.scatter(X,y) plt.plot(X, y_predictions, color='blue', label='拟合线') plt.show()
结果:
[2.] 5.000000000000002 新数据的预测值: [27. 29.] 均方误差 3.1554436208840474e-31 R方值 1.0
案例2:
import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegression # 生成散点图数据 X = [[1], [2], [4], [5]] Y = [2, 4, 6, 8] # 构建线性回归模型 regr = LinearRegression() regr.fit(X, Y) print('系数a为:' + str(regr.coef_[0])) print('截距b为:' + str(regr.intercept_)) # y = regr.predict([[1.5]]) # print(y) y = regr.predict([[1.5], [2.5], [4.5]]) print(y) plt.scatter(X, Y) plt.plot(X, regr.predict(X)) plt.show()
结果:
系数a为:1.4000000000000004 截距b为:0.7999999999999989 [2.9 4.3 7.1]
四、多元线性回归实战
多元线性回归相关知识
一元线性回归模型反映的是单个自变量对因变量的影响,然而实际情况中,影响因变量的自变量往往不止一个,从而需要将一元线性回归模型扩展到多元线性回归模型。
如果构建多元线性回归模型的数据集包含n个观测、p+1个变量(其中p个自变量和1个因变量),则这些数据可以写成下方的矩阵形式:
其中,xij代表第个i行的第j个变量值。如果按照一元线性回归模型的逻辑,那么多元线性回归模型应该就是因变量y与自变量X的线性组合,即可以将多元线性回归模型表示成:y=β0+β1x1+β2x2+…+βpxn+ε
根据线性代数的知识,可以将上式表示成y=Xβ+ε。
其中,β为p×1的一维向量,代表了多元线性回归模型的偏回归系数;ε为n×1的一维向量,代表了模型拟合后每一个样本的误差项。
回归模型的参数求解
在多元线性回归模型所涉及的数据中,因变量y是一维向量,而自变量X为二维矩阵,所以对于参数的求解不像一元线性回归模型那样简单,但求解的思路是完全一致的。为了使读者掌握多元线性回归模型参数的求解过程,这里把详细的推导步骤罗列到下方:
第一步:构建目标函数
根据线性代数的知识,可以将向量的平方和公式转换为向量的内积,接下来需要对该式进行平方项的展现。
第二步:展开平方项
由于上式中的y'Xβ和β'X'y均为常数,并且常数的转置就是其本身,因此y'Xβ和β'X'y是相等的。接下来,对目标函数求参数β的偏导数
第三步:求偏导
如上式所示,根据高等数学的知识可知,欲求目标函数的极值,般都需要对目标函数求导数,再令导函数为0,进而根据等式求得导函数中的参数值。
第四步:计算偏回归系数的值
经过如上四步的推导,最终可以得到偏回归系数β与自变量X、因变量y的数学关系。这个求解过程也被成为“最小二乘法”。基于已知的偏回归系数β就可以构造多元线性回归模型。前文也提到,构建模型的最终目的是为了预测,即根据其他已知的自变量X的值预测未知的因变量y的值。
多元线性回归模型的建立可以分为以下几个步骤:
二元线性回归案例: 根据市人口数x1和城市GDPx2来预测水路客运量y
注意: 二元一次函数(如 z = ax + by + c)的图像是三维空间中的平面
test.xlsx文件下载
通过网盘分享的文件:test.xlsx 链接: https://pan.baidu.com/s/1hghCb164r3WeZGgk1TflGA 提取码: t655 --来自百度网盘超级会员v6的分享
完整代码:
import torch import pandas as pd import numpy as np from sklearn.linear_model import LinearRegression # from matplotlib import pyplot as plt import matplotlib matplotlib.use('TkAgg') import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split from sklearn.metrics import mean_squared_error, r2_score # 设置中文字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 读取Excel文件 data = pd.read_excel('C:\\Users\\miracle\\Desktop\\test.xlsx') X = data[['市人口数x1', '城市GDPx2']] y = data['水路客运量y'] print(X) print(y) # 数据分割 # X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 训练模型 model = LinearRegression() model.fit(X, y) # 所有数据拿来训练 # model.fit(X_train, y_train) # y_pred = model.predict(X_test) # mse = mean_squared_error(y_test, y_pred) # r2 = r2_score(y_test, y_pred) # print(f"MSE: {mse:.2f}") # 3755.91 # print(f"R²: {r2:.2f}") # 0.85 # print(f"Coefficients: {model.coef_}") # print(f"Intercept: {model.intercept_}") # 预测未来水路客运量 x_new = [[560, 1546]] y_pred = model.predict(x_new) print("预测未来水路客运量为:", y_pred[0]) print(X) print(X['市人口数x1']) # 绘制图像 fig = plt.figure() ax = fig.add_subplot(projection='3d') # 绘制3d散点图 # ax.scatter(X[:, 0], X[:, 1], y) ax.scatter(X['市人口数x1'], X['城市GDPx2'], y) # x1, x2 = np.meshgrid(X[:, 0], X[:, 1]) x1, x2 = np.meshgrid(X['市人口数x1'], X['城市GDPx2']) y_pred = model.predict(np.array([x1.flatten(), x2.flatten()]).T).reshape(x1.shape) ax.plot_surface(x1, x2, y_pred, alpha=0.5, cmap='viridis') ax.set_xlabel('市人口数x1') ax.set_ylabel('城市GDPx2') ax.set_zlabel('水路客运量y') plt.title('多元线性回归预测模型案例') plt.show()
结果:
感谢您的阅读,如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮。本文欢迎各位转载,但是转载文章之后必须在文章页面中给出作者和原文连接。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)