周志华机器学习读书笔记第二章(一)

模型评估与选择

(1)错误率+精度=1,错误率是指分类错误的样本数占样本总数的比例。

(2)误差:学习器的实际预测输出与样本的真实输出之间的差异。

训练误差:学习器在训练集上的误差。

泛化误差:在新样本上的误差。

(3)过拟合和欠拟合:学习器把训练样本学的太好了,导致泛化性能下降;欠拟合,指对训练样本的一般性质尚未学好。

过拟合是机器学习面临的关键障碍,各类算法都必然有一些针对过拟合的措施。

(4)过拟合不可避免的证明:

(1)机器学习面临的问题通常是NP难问题

(2)有效的学习算法必然是在多项式时间内运行完成

(3)若可彻底避免过拟合,则通过经验误差最小化就能获得最优解

个人理解:如果能在有限时间内将经验误差最小化,及说明该问题是非NP问题

(5)评估方法

(1)留出法:直接将数据集划分为两个互斥的集合分别作训练集和测试集。

(1)训练/测试的划分要尽可能保持数据分布的一致性。

(2)单次使用留出法得到的结果往往不够稳定可靠,在使用留出法时,一般要采用若干次随机划分、重复进行实验评估。

(2)交叉验证法:先将数据集划分为k个大小相似的互斥子集,分层采样得到,然后每次用k-1个子集的并集作为训练集,余下的那个子集作为测试集,进行k组训练测试,最终得出k个结果的均值。

(3)留一法:交叉验证法的一个特例,另k为样本数,即划分的每个子集中都只有一个样本。

(4)自助法:前面的三种方法都改变了数据集的规模,这必然会引入一些因训练样本规模不同而导致的估计偏差。自助法是对数据集进行多次手动抽取样本,每次取过后放回,直到取够原先的样本数。这样就会有大约36.8%(对每次采样的概率取极限,如下式)的数据没有取过,用来作为测试集。

                          

自助法在数据集小、难以划分训练测试集时很有用。

(6)查准率和查全率:将样例根据其真实类别与学习器预测类别的组合划分为真正例、假正例、真反例、假反例,即真正例+假正例+真反例+假反例=样本数。

查准率=真正例/(真正例+假正例)

查全率=真正例/(真正例+假反例)

查准率与查全率是一对矛盾的度量,即查准率高时,查全率往往偏低;反之,亦然。

通常只有在一些简单的任务中,才可能使查全率和查准率都很高。

(7)F1度量:查准率与查全率的调和平均数,综合考虑查准率、查全率的性能度量。


                                               1/F1=(1/Precison+1/Recall)1/2

(8)为了能让我们表达出对查准率/查全率的不同偏好,
β>0,β大于1时,查全率更有影响;β小于1时,查准率更有影响。

1/Fβ=1/(1+β2)(1/Precision+β2/Recall)

(9)多个二分类混淆矩阵时,我们可以有两种办法:

(1)先在各个混淆矩阵上分别计算出查准率和查全率,在计算平均值,得到宏观值

(2)先将各个混淆矩阵的对应元素平均,再进行微观计算。


β
β
β
很高兴听到你正在学习《机器学习》这本经典的教材,下面我为你提供第十四章概率图模型的Python实现学习笔记。 ## 1. 朴素贝叶斯分类器 ### 1.1 数据准备 在本章中,我们将使用著名的鸢尾花数据集进行分类。首先,我们可以从sklearn库中导入该数据集。 ```python from sklearn.datasets import load_iris iris = load_iris() X = iris.data y = iris.target ``` ### 1.2 朴素贝叶斯分类器实现 接下来,我们可以使用sklearn库中的朴素贝叶斯分类器进行分类,具体实现如下: ```python from sklearn.naive_bayes import GaussianNB from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) gnb = GaussianNB() gnb.fit(X_train, y_train) y_pred = gnb.predict(X_test) accuracy = accuracy_score(y_test, y_pred) print('Accuracy:', accuracy) ``` ### 1.3 结果分析 运行上述代码后,我们可以得到该模型在测试集上的准确率,结果如下所示: ``` Accuracy: 1.0 ``` 可以看出,该模型在鸢尾花数据集上表现出色,准确率达到了100%。 ## 2. 隐马尔可夫模型 ### 2.1 数据准备 在本节中,我们将使用一个简单的例子来介绍隐马尔可夫模型的实现。假设我们有一个长度为100的序列,每个位置上的值都是0或1,其中0和1出现的概率分别为0.6和0.4。我们可以使用numpy库生成这个序列。 ```python import numpy as np np.random.seed(42) sequence = np.random.choice([0, 1], size=100, p=[0.6, 0.4]) ``` ### 2.2 隐马尔可夫模型实现 接下来,我们可以使用hmmlearn库中的隐马尔可夫模型进行序列建模,具体实现如下: ```python from hmmlearn import hmm model = hmm.MultinomialHMM(n_components=2) model.fit(sequence.reshape(-1, 1)) logprob, states = model.decode(sequence.reshape(-1, 1)) print('Sequence:', sequence) print('States:', states) ``` ### 2.3 结果分析 运行上述代码后,我们可以得到该模型对序列的建模结果,结果如下所示: ``` Sequence: [0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] States: [1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1] ``` 可以看出,模型对序列进行了建模,并输出了每个位置上的状态,其中0表示“假”,1表示“真”。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值