人工智能直通车系列23【机器学习基础】(层次聚类原理机器学习模型评估指标(分类))
人工智能直通车系列正在连载更新中,更新的内容包括Python 基础与数学基础、机器学习基础、深度学习基础、完整学习资料以及详细解释代码示例,关注我,持续学习。
·
目录
层次聚类原理
详细解释
层次聚类(Hierarchical Clustering)是一种无监督学习算法,它通过对数据点之间的相似度进行计算,将数据逐步合并或分裂,形成一个层次化的聚类结构,最终以树状图( dendrogram)的形式展示聚类结果。层次聚类主要分为两种类型:凝聚式层次聚类(Agglomerative Hierarchical Clustering)和分裂式层次聚类(Divisive Hierarchical Clustering)。
凝聚式层次聚类
- 原理:从每个数据点作为一个单独的簇开始,然后不断地将最相似的簇合并成一个新的簇,直到所有的数据点都属于同一个簇为止。合并的过程会形成一个树形结构,树的叶子节点是单个的数据点,根节点是包含所有数据点的一个簇。
- 步骤
- 初始化:将每个数据点看作一个单独的簇。
- 计算簇间距离:计算每对簇之间的距离,常见的距离度量方法有单链接(Single Linkage)、完全链接(Complete Linkage)、平均链接(Average Linkage)等。
- 合并簇:选择距离最近的两个簇进行合并,形成一个新的簇。
- 重复步骤 2 和 3:直到所有的数据点都属于同一个簇。
分裂式层次聚类
- 原理:与凝聚式层次聚类相反,它从所有数据点都属于同一个簇开始,然后不断地将一个簇分裂成两个更小的簇,直到每个数据点都成为一个单独的簇为止。
- 步骤
- 初始化:将所有数据点看作一个簇。
- 选择要分裂的簇:选择一个簇进行分裂,通常选择包含数据点最多或方差最大的簇。
- 分裂簇:使用某种分裂准则将选定的簇分裂成两个更小的簇。
- 重复步骤 2 和 3:直到每个数据点都成为一个单独的簇。
场景示例
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from scipy.cluster.hierarchy import dendrogram, linkage
# 生成模拟数据
X, y = make_blobs(n_samples=10, centers=3, random_state=42)
# 进行凝聚式层次聚类
linked = linkage(X, 'single')
# 绘制树状图
plt.figure(figsize=(10, 7))
dendrogram(linked,
orientation='top',
distance_sort='descending',
show_leaf_counts=True)
plt.title('Hierarchical Clustering Dendrogram')
plt.xlabel('Sample index')
plt.ylabel('Distance')
plt.show()
机器学习模型评估指标(分类)
详细解释
在分类问题中,我们需要使用一些评估指标来衡量模型的性能。以下是一些常见的分类模型评估指标:
混淆矩阵(Confusion Matrix)
- 原理:混淆矩阵是一个
的矩阵,其中
是类别的数量。矩阵的行表示真实的类别,列表示预测的类别。矩阵中的每个元素
表示真实类别为
且预测类别为
的样本数量。
- 作用:通过混淆矩阵可以直观地看到模型在各个类别上的分类情况,包括真正例(True Positive,TP)、假正例(False Positive,FP)、真反例(True Negative,TN)和假反例(False Negative,FN)。
准确率(Accuracy)
- 原理:准确率是指模型预测正确的样本数占总样本数的比例,计算公式为:
- 局限性:当数据类别不平衡时,准确率可能无法很好地反映模型的性能。
精确率(Precision)
- 原理:精确率是指预测为正例的样本中,实际为正例的比例,计算公式为:
- 作用:精确率衡量了模型预测正例的准确性。
召回率(Recall)
- 原理:召回率是指实际为正例的样本中,被模型预测为正例的比例,计算公式为:
- 作用:召回率衡量了模型找出正例的能力。
F1 值(F1 - Score)
- 原理:F1 值是精确率和召回率的调和平均数,计算公式为:
- 作用:F1 值综合考虑了精确率和召回率,在两者之间取得了平衡。
场景示例
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import confusion_matrix, accuracy_score, precision_score, recall_score, f1_score
# 生成模拟分类数据
X, y = make_classification(n_samples=1000, n_features=10, n_informative=5, n_classes=2, random_state=42)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 训练逻辑回归模型
model = LogisticRegression()
model.fit(X_train, y_train)
# 进行预测
y_pred = model.predict(X_test)
# 计算评估指标
conf_matrix = confusion_matrix(y_test, y_pred)
accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred)
recall = recall_score(y_test, y_pred)
f1 = f1_score(y_test, y_pred)
print("Confusion Matrix:")
print(conf_matrix)
print(f"Accuracy: {accuracy}")
print(f"Precision: {precision}")
print(f"Recall: {recall}")
print(f"F1 - Score: {f1}")
通过以上代码,我们可以看到如何使用这些评估指标来评估一个分类模型的性能。
更多推荐




所有评论(0)