目录

层次聚类原理

详细解释

凝聚式层次聚类

分裂式层次聚类

场景示例

机器学习模型评估指标(分类)

详细解释

混淆矩阵(Confusion Matrix)

准确率(Accuracy)

精确率(Precision)

召回率(Recall)

F1 值(F1 - Score)

场景示例


层次聚类原理

详细解释

层次聚类(Hierarchical Clustering)是一种无监督学习算法,它通过对数据点之间的相似度进行计算,将数据逐步合并或分裂,形成一个层次化的聚类结构,最终以树状图( dendrogram)的形式展示聚类结果。层次聚类主要分为两种类型:凝聚式层次聚类(Agglomerative Hierarchical Clustering)和分裂式层次聚类(Divisive Hierarchical Clustering)。

凝聚式层次聚类
  • 原理:从每个数据点作为一个单独的簇开始,然后不断地将最相似的簇合并成一个新的簇,直到所有的数据点都属于同一个簇为止。合并的过程会形成一个树形结构,树的叶子节点是单个的数据点,根节点是包含所有数据点的一个簇。
  • 步骤
    1. 初始化:将每个数据点看作一个单独的簇。
    2. 计算簇间距离:计算每对簇之间的距离,常见的距离度量方法有单链接(Single Linkage)、完全链接(Complete Linkage)、平均链接(Average Linkage)等。
    3. 合并簇:选择距离最近的两个簇进行合并,形成一个新的簇。
    4. 重复步骤 2 和 3:直到所有的数据点都属于同一个簇。
分裂式层次聚类
  • 原理:与凝聚式层次聚类相反,它从所有数据点都属于同一个簇开始,然后不断地将一个簇分裂成两个更小的簇,直到每个数据点都成为一个单独的簇为止。
  • 步骤
    1. 初始化:将所有数据点看作一个簇。
    2. 选择要分裂的簇:选择一个簇进行分裂,通常选择包含数据点最多或方差最大的簇。
    3. 分裂簇:使用某种分裂准则将选定的簇分裂成两个更小的簇。
    4. 重复步骤 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)
  • 原理:混淆矩阵是一个C\times C的矩阵,其中C是类别的数量。矩阵的行表示真实的类别,列表示预测的类别。矩阵中的每个元素M_{ij}表示真实类别为i且预测类别为j的样本数量。
  • 作用:通过混淆矩阵可以直观地看到模型在各个类别上的分类情况,包括真正例(True Positive,TP)、假正例(False Positive,FP)、真反例(True Negative,TN)和假反例(False Negative,FN)。
准确率(Accuracy)
  • 原理:准确率是指模型预测正确的样本数占总样本数的比例,计算公式为:
    Accuracy=\frac{TP + TN}{TP + TN+FP + FN}
  • 局限性:当数据类别不平衡时,准确率可能无法很好地反映模型的性能。
精确率(Precision)
  • 原理:精确率是指预测为正例的样本中,实际为正例的比例,计算公式为:
    Precision=\frac{TP}{TP + FP}
  • 作用:精确率衡量了模型预测正例的准确性。
召回率(Recall)
  • 原理:召回率是指实际为正例的样本中,被模型预测为正例的比例,计算公式为:
    Recall=\frac{TP}{TP + FN}
  • 作用:召回率衡量了模型找出正例的能力。
F1 值(F1 - Score)
  • 原理:F1 值是精确率和召回率的调和平均数,计算公式为:
    F1=\frac{2\times Precision\times Recall}{Precision + Recall}
  • 作用: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}")

通过以上代码,我们可以看到如何使用这些评估指标来评估一个分类模型的性能。

Logo

一站式 AI 云服务平台

更多推荐