《机器学习》 周志华学习笔记第十四章 概率图模型 python实现
时间: 2023-06-20 17:09:02 浏览: 193
很高兴听到你正在学习《机器学习》这本经典的教材,下面我为你提供第十四章概率图模型的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表示“真”。
阅读全文