机器学习基本理论

一、什么是机器学习?

让机器从数据里自己找规律,而不是人写死规则。

二 、人工智能、机器学习、深度学习有什么关系?

三、机器学习三要素

机器学习的方法一般主要由三部分构成:模型、策略和算法,可以认为:

机器学习方法 = 模型 + 策略 + 算法

  1. 模型(model):总结数据的内在规律,用数学语言描述的参数系统
  2. 策略(strategy):选取最优模型的评价准则
  3. 算法(algorithm):选取最优模型的具体方法

四、机器学习的图例汇总

五、监督学习的建模流程

六、什么是特征工程?

特征工程(Feature Engineering)是机器学习过程中非常重要的一步,指的是通过对原始数据的处理、转换和构造,生成新的特征或选择有效的特征,从而提高模型的性能。

七、特征选取方法

1、皮尔逊相关系数

python 复制代码
# 特征构造之相关系数:皮尔逊相关系数
import pandas as pd

advertising = pd.read_csv(r'E:/LLM/machine-learning/advertising.csv')
# print(advertising.head())
print(advertising.isnull().sum())

advertising.drop(advertising.columns[0],axis=1,inplace=True)
advertising.dropna(inplace=True)
x = advertising.drop('Sales',axis=1)
y = advertising['Sales']

print(x.corrwith(y,method = 'pearson'))

运行结果如下:

python 复制代码
import seaborn as sns
import matplotlib.pyplot as plt

# 计算皮尔逊相关系数矩阵
corr_matrix = advertising.corr(method='pearson')

# 可视化热力图
sns.heatmap(corr_matrix,annot=True,cmap='coolwarm',fmt='.2f')
plt.show()

运行结果如下:

2、斯皮尔曼相关系数

python 复制代码
# 斯皮尔曼相关系数:两个变量直接的关系

import pandas as pd

# 每周学习时长
X =[[5],[8],[10],[12],[15],[3],[7],[9],[14],[6]]

# 数学成绩
y = [55,65,70,75,85,50,60,72,80,58]

# 计算斯皮尔曼相关系数
X = pd.DataFrame(X)
y = pd.Series(y)

print(X.corrwith(y,method = 'pearson'))

运行结果:

3、主成分分析

python 复制代码
# 主成分分析:通过线性变换将高纬度数据投影到低纬度空间,同时保留数据的主要变化模式

import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
from mpl_toolkits.mplot3d import Axes3D

n_samples = 1000
# 第1个主成分方向
component1 = np.random.normal(0,1,n_samples)
# 第2个主成分方向
component2 = np.random.normal(0,0.2,n_samples)
# 第3个方向(噪声,方差较小)
noise = np.random.normal(0,1,n_samples)
# 构造3维数据
X = np.vstack([component1-component2,component1+component2,component2+noise]).T

# 标准化
scaler = StandardScaler()
X_standardized = scaler.fit_transform(X)

# 应用PCA,将三维数据降维 到2维
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_standardized)

# 可视化
# 转换前的三维数据可视化

fig = plt.figure(figsize=(12,4))
ax1 = fig.add_subplot(121,projection='3d')
ax1.scatter(X[:,0],X[:,1],X[:,2],c='g')
ax1.set_title('Before PCA(3D)')
ax1.set_xlabel('Feature 1')
ax1.set_ylabel('Feature 2')
ax1.set_zlabel('Feature 3')

# 转换后的2维数据可视化
ax2 = fig.add_subplot(122)
ax2.scatter(X_pca[:,0],X_pca[:,1],c='g')
ax2.set_title('After PCA(2D)')
ax2.set_xlabel('Principal Component 1')
ax2.set_ylabel('Principal Component 2')
plt.show()

运行结果如下:

八、模型评估

1、损失函数

对于模型一次预测结果的好坏,需要有一个度量标准。

对于监督学习而言,给定一个输入X ,选取的模型就相当于一个"决策函数"f ,它可以输出一个预测结果f(X) ,而真实的结果(标签)记为Yf(X)Y 之间可能会有偏差,我们就用一个损失函数 (loss function)来度量预测偏差的程度,记作 L(Y,f(X))

(1)、损失函数用来衡量模型预测误差的大小;损失函数值越小,模型就越好;

(2)损失函数是f(X)Y的非负实值函数;

2、欠拟合和过拟合

欠拟合:模型在训练集和测试集上误差都比较大。模型过于简单,高偏差。

过拟合:模型在训练集上误差较小,但在测试集上误差较大。模型过于复杂,高方差。

九、梯度下降法

1、什么是梯度下降法?

梯度下降法(gradient descent)是一种常用的一阶优化方法,是求解无约束优化问题最简单、最经典的方法之一。梯度下降法是迭代算法,基本思路就是先选取一个适当的初始值,然后沿着梯度方向或者负梯度方向,不停地更新参数,最终取到极小值。

十、模型评估指标

1、回归模型常用评估指标:均方误差(MSE)

2、分类模型常用评估指标:准确率

混淆矩阵

准确率

精确率

召回率

F1分数

ROC曲线

AUC

AUC值代表ROC曲线下的面积,用于量化模型性能。AUC值越大,模型区分正负类的能力越强,模型性能越好。AUC值=0.5表示模型接近随机猜测,AUC值=1代表完美模型。

最后用一个简单的代码示例来验证一下:

构建混淆矩阵

python 复制代码
import pandas as pd
import seaborn as sns
from sklearn.metrics import confusion_matrix

label = ["猫", "狗"]  # 标签
y_true = ["猫", "猫", "猫", "猫", "猫", "猫", "狗", "狗", "狗", "狗"]  # 真实值
y_pred1 = ["猫", "猫", "狗", "猫", "猫", "猫", "猫", "猫", "狗", "狗"]  # 预测值
matrix1 = confusion_matrix(y_true, y_pred1, labels=label)  # 混淆矩阵
print(pd.DataFrame(matrix1, columns=label, index=label))
sns.heatmap(matrix1, annot=True, fmt='d', cmap='Greens')

准确率

python 复制代码
from sklearn.metrics import accuracy_score

label = ["猫", "狗"]  # 标签
y_true = ["猫", "猫", "猫", "猫", "猫", "猫", "狗", "狗", "狗", "狗"]  # 真实值
y_pred1 = ["猫", "猫", "狗", "猫", "猫", "猫", "猫", "猫", "狗", "狗"]  # 预测值
accuracy = accuracy_score(y_true, y_pred1)

精确率

python 复制代码
from sklearn.metrics import precision_score

label = ["猫", "狗"] # 标签
y_true = ["猫", "猫", "猫", "猫", "猫", "猫", "狗", "狗", "狗", "狗"] # 真实值
y_pred1 = ["猫", "猫", "狗", "猫", "猫", "猫", "猫", "猫", "狗", "狗"] # 预测值
precision = precision_score(y_true, y_pred1, pos_label="猫") # pos_label指定正例
print(precision)

召回率

python 复制代码
from sklearn.metrics import recall_score

label = ["猫", "狗"] # 标签
y_true = ["猫", "猫", "猫", "猫", "猫", "猫", "狗", "狗", "狗", "狗"] # 真实值
y_pred1 = ["猫", "猫", "狗", "猫", "猫", "猫", "猫", "猫", "狗", "狗"] # 预测值
recall = recall_score(y_true, y_pred1, pos_label="猫") # pos_label指定正例
print(recall)
相关推荐
ZhengEnCi1 小时前
01b-上下文向量与信息瓶颈
人工智能
王_teacher1 小时前
机器学习 矩阵求导 完整公式+严谨推导
人工智能·线性代数·考研·机器学习·矩阵·线性回归
码以致用2 小时前
DeerFlow Memory架构
人工智能·ai·架构·agent
ting94520002 小时前
从零构建大模型实战:数据处理与 GPT-2 完整实现
人工智能
学点程序2 小时前
Manifest:帮个人 AI Agent 降低模型成本的开源路由器
人工智能·开源
可观测性用观测云2 小时前
观测云 x AI Agent:运维智能化的范式跃迁实践
人工智能
数数科技的数据干货2 小时前
ThinkingAI携手华为云,共建企业级AI Agent平台Agentic Engine
人工智能·ai·华为云·agent
人工智能AI技术2 小时前
春招急救:7天面试突击方案
人工智能
2603_954708312 小时前
如何确保微电网标准化架构设计流程的完整性?
网络·人工智能·物联网·架构·系统架构