机器学习与模式识别

article/2025/10/7 17:20:01

机器学习与模式识别

    • 第一章 绪论
      • 1.区分回归、聚类、分类任务
      • 2.机器学习的一般过程
      • 3.假设空间的确定,版本空间的含义
    • 第二章 模型评估与选择
      • 1.欠拟合和过拟合概念的理解
      • 2.模型的评估方法
        • (1) k折交叉验证
        • (2) 留一法(n折交叉验证)
        • (3) 代码实例——鸢尾花数据集
      • 3.衡量回归的性能指标
        • (1) 公式
        • (2) 代码实现
      • 4.衡量分类任务的性能指标
        • (1) 查准率
        • (2) 查全率
        • (3) F1度量
        • (4)假正例率
        • (5)真正例率
        • (6)ROC曲线
        • (7) AUC
      • 代码实例-乳腺癌数据集
    • 第三章 线性模型
      • 1,线性模型的知识储备
      • 2,线性回归
      • 3,逻辑回归
    • 第四章 决策树
      • 1,基本流程
      • 2,属性划分原则
      • 3,剪枝处理
        • (1)预剪枝
        • (2)后剪枝
    • 第五章 神经网络
      • 感知机-单个神经元模型

参考教材:《机器学习》清华大学出版社 周志华;
代码部分建议使用jupyter notnook进行逐句的验证,练习
学习记录内容,若有不对,欢迎留言指正。
持续更文中……

第一章 绪论

1.区分回归、聚类、分类任务

2.机器学习的一般过程

在这里插入图片描述

3.假设空间的确定,版本空间的含义

假设空间的计算:(*+n属性) (+n属性)…… (+n属性)+ 1
对“1”的理解: 定义好坏的前提可能都是不存在的概念,我们常常用空集来表示这个假设。
版本空间: 一个与训练集一致的假设集合
Ps:训练集、验证集、测试集、交叉验证基本概念理解

第二章 模型评估与选择

1.欠拟合和过拟合概念的理解

欠拟合:不能很好的捕捉到数据特征,模型在训练集上误差高。
过拟合:学习的太彻底,噪声特征也学习了,模型在训练集上误差低,验证集上误差高。

2.模型的评估方法

(1) k折交叉验证

把原始训练数据集分为k份(不重合),然后做k次模型的训练和验证。每一次选一个作为验证集,其余k-1个子集作为训练集使用。

(2) 留一法(n折交叉验证)

与k折交叉验证不同,这里的n指的是样本的数目,即每次用一个样本做验证集,其余n-1个样本做训练集。

(3) 代码实例——鸢尾花数据集

项目简介:鸢尾花数据集(Iris)是一个经典数据集。数据集内包含 3 类共 150 条记录,每类各 50 个数据,每条记录都有 4 项特征:花萼长度、花萼宽度、花瓣长度、花瓣宽度,可以通过这4个特征预测鸢尾花卉属于(iris-setosa, iris-versicolour, iris-virginica,山鸢尾、变色鸢尾和维吉尼亚鸢尾三个类别)中的哪一品种。
鸢尾花数据集官网下载链接

# 准备数据集
from sklearn import datasets
X,y=datasets.load_iris(return_X_y=True)
#生成训练集和测试集
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=7)
'''
X_train,X_test,y_train,y_test=train_test_split(train_data,train_target,test_size,random_state)
test_size(): 划分的比例,例test_size=0.2 表示数据集的20%划分为测试集,其余为训练集
'''
#训练
from sklearn.linear_model.logistic import LogisticRegression
model=LogisticRegression()    #逻辑回归模型
model.fit(X_train,y_train)
#预测
y_predict=model.predict(X_test)
from sklearn.metrics import accuracy_score   #accuracy_score() 求所有分类正确的百分比
print(accuracy_score(y_test,y_predict))
'''
sklearn.metrics.accuracy_score(y_true, y_pred, normalize=True, sample_weight=None)
normalize:默认值为True,返回正确分类的比例;如果为False,返回正确分类的样本数
'''
#k折交叉验证
from sklearn.model_selection import KFold,cross_val_score
kf = KFold(10)
result = cross_val_score(model,X_train,y_train,cv=kf,scoring='accuracy')
result.mean()
'''
KFold(n_split=10,shuffle=False,random_state=None)(折数,是否打乱数据顺序,随机数种子)
cross_val_score(estiamtor,X_train,y_train,scoring=' ',cv=  )(交叉验证算法,,样本标签,评价指标,交叉验证数或可迭代的次数)
'''
#留一法
from sklearn.model_selection import LeaveOneOut
loocv=LeaveOneOut()
result=cross_val_score(model,X_train,y_train,cv=loocv,scoring='accuracy')
result.mean()

3.衡量回归的性能指标

(1) 公式

均方误差:
在这里插入图片描述
均方根误差:
在这里插入图片描述
平均绝对误差:
在这里插入图片描述
例题一道:
假设你有以下数据:输入和输出都只有一个变量。使用线性回归模型(y=wx+b)来拟合数据。那么使用留一法(Leave-One Out)交叉验证得到的均方误差是多少? ( 49/27 留一法 + MSE公式)

输入x输出y
02
22
31

决定系数: 模型好坏的决定系数 R 2 R^{2} R2
在这里插入图片描述
分子:需要衡量的模型
分母:基准模型(将均值作为预测值)
(1) R 2 R^{2} R2=1,模型对所有的数据预测准确,模型的性能最优;
(2) R 2 R^{2} R2=0,模型的性能与基准模型相同;
(3) R 2 R^{2} R2<0,模型的性能低于基准模型。

(2) 代码实现

from sklean.metrics import
mean_absolute_error(y_true,y_predict)        #平均绝对误差
mean_squared_error(y_true,y_predict)         #均方根误差
r2_score(y_true,y_predict)                   #决定系数

4.衡量分类任务的性能指标

精度:分类正确的样本数 / 样本总数

accuracy_score(y_true,y_predict)

混淆矩阵的构建

真实\预测01
0TNFP
1FNTP
from sklearn.metrics import confusion_matrix
confusion_matrix(y_true,y_predict)

(1) 查准率

P r e c i s i o n = T P T P + F P Precision=\frac{TP}{TP+FP} Precision=TP+FPTP
通俗理解:
预测为正例真实为正例 占 预测结果为正例的比例,即预测正例里面的准确率

from sklearn.metrics import precision_score
precision_score(y_true,y_predict)

(2) 查全率

R e c a l l = T P T P + F N Recall=\frac{TP}{TP+FN} Recall=TP+FNTP
召回率 ,即真实正例中的准确率

from sklearn.metrics import recall_score
recall_score(y_true,y_predict)

(3) F1度量

同时兼顾查准率与查全率的F1度量:
F 1 = 2 P R P + R F1=\frac{2PR}{P+R} F1=P+R2PR
在这里插入图片描述
β>0度量了查全率对查准率的相对重要性;
β=1退化为标准F1度量
β>1查全率更重要
β<1查准率更重要。

from sklearn.metrics import f1_score
f1_score(y_true,y_predict)

(4)假正例率

F P R = F P F P + T N FPR=\frac{FP}{FP+TN} FPR=FP+TNFP
真反预测为正占真反的比例

(5)真正例率

T P R = T P F N + T P TPR=\frac{TP}{FN+TP} TPR=FN+TPTP
真正预测为正占真正的比例

(6)ROC曲线

POC曲线:FPR为横轴,TPR为纵轴
意义:
体现其期望泛化性能的好坏 。凸起越高,模型准确率越高。

(7) AUC

一般情况下,AUC越大,模型越好。
两种求法:
1,ROC曲线下方与x轴围成的面积
2,利用公式进行计算
在这里插入图片描述
在这里插入图片描述

from sklearn.metrics import roc_auc_score
roc_auc_score(y_true,y_predict)

例题一道:
求其 AUC
在这里插入图片描述
ROC曲线:
在这里插入图片描述
公式求法过程为:
由于预测概率顺序已经排好,所以公式中的 ∑ i e p o s i t i v e c l a s s r a n k i = 123 \sum_{iepositiveclass}rank_i=123 iepositiveclassranki=123,红色序号之和
所以 A U C = 123 − 10 ∗ ( 10 + 1 ) 2 10 ∗ 10 = 0.68 AUC=\frac{123-\frac{10*(10+1)}{2}}{10*10}=0.68 AUC=1010123210(10+1)=0.68

代码实例-乳腺癌数据集

乳腺癌数据集官网链接(访问较慢)
数据集中:每个图像文件名都存储了关于图像本身的信息:活检方法、肿瘤级别、肿瘤类型、患者识别和放大系数。例如,SOB_B_TA-14-4659-40-001.png是一个管状腺瘤型良性肿瘤的图像1,放大倍数为40倍,来自于14-4659玻片,由SOB程序收集。

# 1、准备数据(载入数据)
from sklearn import datasets
X,y=datasets.load_breast_cancer(return_X_y=True)
# 2、生成训练集和测试集
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=4)
# 3、训练
from sklearn.linear_model.logistic import LogisticRegression
model=LogisticRegression()
model.fit(X_train,y_train)
# 4、预测
y_predict = model.predict(X_test)
y_score = model.predict_proba(X_test)[:,1]
# 5、评估
## 5.1 精度
from sklearn.metrics import accuracy_score
print(accuracy_score(y_test,y_predict))
## 5.2 混淆矩阵
from sklearn.metrics import confusion_matrix
print(confusion_matrix(y_test,y_predict))
## 5.3 查准率,查全率,f1_score
from sklearn.metrics import precision_score,recall_score,f1_score
print(precision_score(y_test,y_predict))
print(recall_score(y_test,y_predict))
print(f1_score(y_test,y_predict))
## 5.4 PR曲线
from sklearn.metrics import precision_recall_curve
p,r,t=precision_recall_curve(y_test,y_score)
import matplotlib.pyplot as plt
plt.plot(r,p,'b')
plt.xlabel('recall')
plt.ylabel('precision')
plt.title('PR curve')
plt.show()## 5.5ROC曲线
from sklearn.metrics import roc_curve,roc_auc_score
fpr,tpr,t=roc_curve(y_test,y_score)
plt.plot(fpr,tpr,'r')
plt.xlabel('fpr')
plt.ylabel('tpr')
plt.title('ROC curve')
plt.show()print(roc_auc_score(y_test,y_score))

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

第三章 线性模型

1,线性模型的知识储备

凸函数、特征值与特征向量、损失函数(用来衡量拟合程度的好坏)、偏导
线性回归的损失函数:均方差损失函数
逻辑回归的损失函数:对数损失函数
基本模型中的最佳参数:
w ∗ = ( X T X ) − 1 X T y w^{*}=(X^TX)^{-1}X^Ty w=(XTX)1XTy
线性模型的基本形式实现代码:

## 1.1读取模拟数据ex0_1.csv
from pandas import read_csv
df=read_csv('ex0_1.csv',header=None) #标题行,header
data=df.values
#输入输出分离
X=data[:,0].reshape((-1,1))
y=data[:,1].reshape((-1,1))
## 1.2 绘制散点图
import matplotlib.pyplot as plt
plt.scatter(X,y)
plt.show()
## 1.3正规方程解 inv(X.T * X ) * X.T * y
import numpy as np
#求X增广矩阵
ones=np.ones((X.shape[0],1))
X_ones = np.hstack((ones,X))XT=X_ones.T                #求X转置
XTX=np.dot(XT,X_ones)
XTX_1=np.linalg.inv(XTX)
XTX_1XT=np.dot(XTX_1,XT)
W=np.dot(XTX_1XT,y)
## 1.4 绘制拟合的直线
x_min=min(X)
x_max=max(X)
x_w = np.linspace(x_min,x_max,2)
y_w = x_w*W[1]+W[0]
plt.scatter(X,y)
plt.plot(x_w,y_w,'r')
plt.show()
## 函数形式
def LR(X,y):ones=np.ones((X.shape[0],1))X_ones = np.hstack((ones,X))XT=X_ones.T                #求X转置XTX=np.dot(XT,X_ones)XTX_1=np.linalg.inv(XTX)XTX_1XT=np.dot(XTX_1,XT)W=np.dot(XTX_1XT,y)return W

2,线性回归

3,逻辑回归

第四章 决策树

决策树:内部结点节点对应属性;叶结点对应标签;分支对应属性值;

1,基本流程

在这里插入图片描述

2,属性划分原则

信息商
信息增益:在划分数据集之前和之后信息发生的变化。获得信息增益最高的属性就是最好的选择。
在这里插入图片描述
决策树的字典结构:
决策树={根节点属性:{}}
={根节点属性:{
分支1(内部结点):{ },
分支2(叶子结点):类别
}}

在这里插入图片描述

tree={}   #空决策树
tree={'act_info':{'high':'no','medium':{'gender':{'man': 'yes','female':'no'}},'low':'yes'}
}
# 一,决策树
## 1,读取西瓜集ex4.csv
from pandas import read_csv
df = read_csv("ex4.csv",header=None)
data = df.values
X = data[:,:-1]
y = data[:,-1]
names_chinese =['色泽','根蒂','敲声','纹理','脐部','触感']
names_english = ['color' , 'root', 'sound','texture' ,'navel','feeling']
label_chinese =['好瓜','坏瓜']
label_english = ['good', 'bad']
## 2,求信息商
import numpy as np
def calEntropy(y):classes = np.unique(y)ent = 0for c in classes:pc = len(y[y==c])/len(y)ent = ent-pc*np.log2(pc)return ent
## 3,求信息增益
def calInfoGain(X,y,index):ent_f = calEntropy(y)  #划分前的信息商ent_e = 0              #划分后的信息商for v in np.unique(X[:,index]):sub_y = y[X[:,index]==v]               # ???ent_e = ent_e + len(sub_y)/len(y)*calEntropy(sub_y)   # 对应公式累加得到划分后的信息商gain = ent_f - ent_ereturn gain## 4,最优属性选择def getBestFeature(X,y):maxGain = 0label = 0for i in range(X.shape[1]):gain = calInfoGain(X,y,i)if gain>maxGain:maxGain = gainlabel = ireturn label
names_chinese[getBestFeature(X,y)]     # 输出 ‘纹理’

增益率
利用信息增益对属性进行划分,对属性值数目较多的属性有所偏好,为了克服这个弊端,引入了增益率的概念。增益率计算公式如下:
G a i n r a t i o ( D , a ) = G a i n ( D , a ) I V ( a ) Gain_ratio(D,a)=\frac{Gain(D,a)}{IV(a)} Gainratio(D,a)=IV(a)Gain(D,a)
其中: I V ( a ) IV(a) IV(a)称为属性固有值,V越大,则 I V ( a ) IV(a) IV(a)越大
I V ( a ) = − ∑ v = 1 v ∣ D v ∣ ∣ D ∣ l o g 2 ∣ D v ∣ ∣ D ∣ IV(a)= -\sum^{v}_{v=1}\frac{|D^v|}{|D|}log_{2}\frac{|D^v|}{|D|} IV(a)=v=1vDDvlog2DDv

3,剪枝处理

在决策树学习过程中,为了尽可能正确分类训练样本,可能划分的较多,有时会造成决策树分支过多,这时可能会因训练样本学得太好,以致于把训练集自身的特点当作所有数据都具有的一般性质导致过拟合。
决策树剪枝是对付过拟合的一种手段,通过主动去掉一些分支来降低过拟合的风险。

(1)预剪枝

(2)后剪枝

第五章 神经网络

感知机-单个神经元模型

单层感知机
感知机由两层神经元组成。
在这里插入图片描述
仅输出层称为M-P神经元,输入层不能称。线性变换: z = w 1 x 1 + w 2 x 2 z=w_1x_1+w_2x_2 z=w1x1+w2x2
多层感知机-多层前馈神经网络
由输入层、隐藏层、输出层构成。
M-P神经元:隐藏层、输出层
在这里插入图片描述


http://chatgpt.dhexx.cn/article/iE18Kbq3.shtml

相关文章

机器学习和模式识别怎么区分?

随着人工智能在近些年的崛起&#xff0c;机器学习、模式识别这两个词也成为了热门词汇&#xff0c;频繁出现在大众眼前。虽然常常听说机器学习与模式识别&#xff0c;但是却很少有人能清楚地区别两者。本文就带大家充分了解机器学习和模式识别的概念、区别和联系。 机器学习和…

模式识别与机器学习第一章

一、模式的概念 广义&#xff1a;存在于时间和空间中可观察的物体。如果可以区别它们是否相同或是否相似&#xff0c;都可以称之为模式。 狭义&#xff1a;模式所指的不是事物本身&#xff0c;而是从事物获得的信息&#xff0c;模式往往表现为具有时间和空间分布的信息。 模式的…

模式识别与机器学习 第一章 绪论

引言 课程介绍 1956年夏天达特茅斯会议标志着人工智能学科的诞生 人工智能之父 约翰麦卡锡 基础&#xff1a;线性代数、概率统计、最优化理论 交叉课程&#xff1a;图像处理、计算机视觉、数据挖掘、自然语言处理、多媒体技术 参考书目&#xff1a;《机器学习》西瓜书《统…

ubuntu安装宝塔

一、宝塔面板的系统要求 以下是宝塔官网对于 Linux VPS 的系统要求&#xff1a; 1、 操作系统要求&#xff1a;全新系统 (支持 CentOS、Ubuntu、Debian、Fedora、Deepin)&#xff0c;确保是干净的操作系统&#xff0c;没有安装过其它环境带的 Apache/Nginx/php/MySQL。另外&am…

ubuntu 安装 nginx

apt-get安装nginx 1、切换到root用户安装 安装最好用root用户安装 不然很多文件权限的报错会让人崩溃 sudo su root apt-get install nginx #安装 nginx -v #查看安装版本 service nginx start #启动nginx 2、启动后&#xff0c;在网页重输入ip地址&#xff0c;即可看到ng…

Ubuntu安装repo

安装步骤&#xff1a; 1、根目录下创建.bin文件夹 mkdir ~/bin 2、配置为永久环境变量 打开&#xff1a;vi ~/.bashrc 在文件末尾加上&#xff1a;export PATH~/bin:$PATH 生效&#xff1a;source ~/.bashrc 3、下载repo源码 git clone https://gerrit-googlesource.lu…

ubuntu安装oracle

一、前期准备 安装java8,参考ubuntu安装jdk8文档 安装docker,参考linux安装第三方库文档 二、安装Oracle镜像的过程 1、切换到root账号下&#xff0c;如果是普通账号&#xff0c;下面操作指令前面加sudo 2.搜索oracle镜像 docker search oracle 3.下载oracle镜像 Docker …

Ubuntu安装MySQL

安装 1.首先更新本地存储库索引&#xff0c;执行sudo apt update 2.从APT存储库安装MySQL&#xff0c;执行sudo apt install MySQL-server&#xff08;改为sudo apt install mysql-server&#xff0c;看图&#xff09;&#xff0c;在安装过程中&#xff0c;可能会出现[Y / n…

ubuntu安装cmake

ubuntu 安装cmake 一、命令行安装 &#xff08;这种直接安装cmake&#xff0c;其实安装的版本都太老了&#xff0c;这种方式不推荐 &#xff09; sudo apt install cmake二、Cmake源码编译安装 1. 更新一下g sudo apt-get install g 2. 先检查是否有cmake which cmake如果…

Ubuntu安装RabbitMQ

1、首先确认Linux 内核版本,确定是Ubuntu 还是CentOS版本&#xff1a;uname -a 2、rabbitMq需要erlang语言的支持&#xff0c;在安装rabbitMq之前需要安装erlang&#xff0c;执行命令 apt-get install erlang-nox 3、注意检查RabbitMQ 与erlang 的版本对应:RabbitMQ Erlang Ve…

Ubuntu 安装Tools

点击光盘&#xff0c;里面有个VMwareTools的文件&#xff0c;将文件拖入下载中 单击右键&#xff0c;选择在终端中打开 .pl可执行文件 安装软件需要切换到管理员权限 sudo su

Ubuntu安装cuda

目录 1、查看系统推荐的cuda版本 2、官网下载cuda软件包 3、安装 4、环境配置 5、验证cuda是否正常 1、查看系统推荐的cuda版本 查看前应先安装显卡驱动&#xff0c;可以查看NVIDIA显卡驱动安装 nvidia-smi 这里显示的是cuda11.4版本 2、官网下载cuda软件包 官网cuda下…

Ubuntu安装虚拟机

如果客户有在Ubuntu下安装虚拟机的要求&#xff0c;可以用到本篇文档&#xff0c;目前只测试16.04.6版本&#xff0c;虚拟机为16.1测试版&#xff0c;有效期为30天&#xff0c;软件仅供测试。 1&#xff0c;先安装Ubuntu系统 2&#xff0c;安装后把虚拟机软件放到桌面上&…

ubuntu安装redis

ubuntu安装redis 1.环境配置 安装gcc 和 make sudo apt-get install -y gcc sudo apt-get install -y g sudo apt-get install -y gcc automake autoconf libtool make2.上传redis压缩包到服务器 目前上传的路径是 /usr/local/redis 3.解压redis压缩包 tar -zxvf redis-4.…

Ubuntu安装ftp

1、安装&#xff1a; sudo apt install vsftpd 2、添加一个用户 &#xff1a; sudo adduser ftp_zhang&#xff0c;然后输入密码Zhang_520&#xff0c;之后会自动在/home/创建ftp_zhang目录。 3、修改配置文件&#xff1a; sudo vi /etc/vsftpd.conf&#xff0c;增加以下代码&…

Ubuntu 安装 anaconda

文章目录 写在前面一、官网下载安装包二、安装参考链接 写在前面 Ubuntu安装 anaconda 比较简单&#xff0c;去官网下载 anaconda 安装包&#xff0c;然后安装即可。 自己的安装环境&#xff1a;Ubuntu18.04、anaconda3 博客撰写日期&#xff1a;2022.10.07。 一、官网下载安…

Ubuntu安装docker

1.先卸载旧版&#xff0c;如果没有的话&#xff0c;就不用执行了&#xff0c;直接第二步。 apt-get remove docker docker-engine docker.io containerd runc2.在终端输入 apt update apt-get install ca-certificates curl gnupg lsb-release3.安装证书 curl -fsSL http://…

Ubuntu安装openssl

动态库安装 到官网下载openssl&#xff0c;此处选择的openssl-1.1.1o.tar.gz&#xff0c;官网地址将下载的文件移动到主目录下 mv openssl-1.1.1o.tar.gz /home/username将username替换为自己的用户名 到移动后的目录下打开终端&#xff0c;解压文件&#xff0c;并修改解压后…

Ubuntu的安装教程

文章目录 一、Ubuntu 的安装教程1、Ubuntu的镜像下载2、服务器版的安装教程2.1.1、允许 root 远程登录 3、桌面版的安装教程3.1.1、允许 root 远程登录 一、Ubuntu 的安装教程 1、Ubuntu的镜像下载 ​ 这里我选择阿里云的镜像下载你也可以选择Ubuntu的官网下载 Ubuntu官网 如…

ubuntu安装教程

1 ubuntu安装教程 1.首先进入虚拟机主页&#xff0c;选项卡–>转到"主页"选项卡–>创建新的虚拟机 2.选择自定义(高级) 3.下一步 4.选择稍后安装操作系统 5.客户端操作系统选择Linux,,选择要安装的系统&#xff0c;此处选择utuntu 64位 6.自定义好虚拟机名称及…