算法伪代码

BEGIN  

    // 1. 导入必要的库  

    导入 numpy 作为 np  

    导入 pandas 作为 pd  

     sklearn 导入 datasets  

     sklearn.model_selection 导入 train_test_split, cross_val_score  

     sklearn.cluster 导入 KMeans  

     sklearn.metrics 导入 accuracy_score, precision_score, recall_score, f1_score, silhouette_score  

 

    // 2. 加载 iris 数据集  

    iris = datasets.load_iris()  

    设置 X = iris.data      // 特征数据  

    设置 y = iris.target    // 标签数据  

 

    // 3. 使用留出法将数据集分为训练集和测试集  

    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42, stratify=y)  

 

    // 4. 训练 K 均值聚类算法,类别数为 3,设置 n_init 参数  

    kmeans = KMeans(n_clusters=3, random_state=42, n_init=10)  

    kmeans.fit(X_train) // 训练模型  

 

    // 5. 使用五折交叉验证评估模型性能  

    // 获取训练集的预测标签  

    train_predictions = kmeans.predict(X_train)  

 

    // 定义评估指标计算函数  

    FUNCTION evaluate_model(y_true, y_pred)  

        accuracy = accuracy_score(y_true, y_pred)  

        precision = precision_score(y_true, y_pred, average='weighted')  

        recall = recall_score(y_true, y_pred, average='weighted')  

        f1 = f1_score(y_true, y_pred, average='weighted')  

        RETURN accuracy, precision, recall, f1  

    END FUNCTION  

 

    // 进行五折交叉验证  

    cross_val_scores = cross_val_score(kmeans, X_train, y_train, cv=5)  

    打印 "五折交叉验证得分: ", cross_val_scores  

 

    // 在训练集上评估模型  

    accuracy, precision, recall, f1 = evaluate_model(y_train, train_predictions)  

    打印 "训练集上的评估指标"  

    打印 "准确度: ", accuracy  

    打印 "精度: ", precision  

    打印 "召回率: ", recall  

    打印 "F1 : ", f1  

 

    // 6. 在测试集上测试模型性能  

    test_predictions = kmeans.predict(X_test)  

    test_accuracy, test_precision, test_recall, test_f1 = evaluate_model(y_test, test_predictions)  

    打印 "测试集上的评估指标"  

    打印 "准确度: ", test_accuracy  

    打印 "精度: ", test_precision  

    打印 "召回率: ", test_recall  

    打印 "F1 : ", test_f1  

 

    // 7. 计算轮廓系数以评估聚类效果  

    silhouette_avg = silhouette_score(X_test, test_predictions)  

    打印 "测试集轮廓系数: ", silhouette_avg  

END

   2. 算法主要代码

完整源代码\调用库方法(函数参数说明)

import numpy as np

import pandas as pd

from sklearn import datasets

from sklearn.model_selection import train_test_split, cross_val_score

from sklearn.cluster import KMeans

from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score

from sklearn.metrics import silhouette_score

 

# 1. 加载 iris 数据集

iris = datasets.load_iris()

X = iris.data

y = iris.target

 

# 2. 留出法将数据集分为训练集和测试集

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42, stratify=y)

 

# 3. 训练 K 均值聚类算法,类别数为 3,设置 n_init 参数

kmeans = KMeans(n_clusters=3, random_state=42, n_init=10) # 显式设置 n_init

kmeans.fit(X_train)

 

# 4. 使用五折交叉验证评估模型性能

# 为了计算准确度、精度、召回率和 F1 值,我们需要将聚类结果和真实标签进行比较

# KMeans 返回聚类标签,我们使用其预测进行评估

# 先得到训练集的预测标签

train_predictions = kmeans.predict(X_train)

 

# 然后为了便于进行交叉验证,定义一个函数来计算评估指标

def evaluate_model(y_true, y_pred):

accuracy = accuracy_score(y_true, y_pred)

precision = precision_score(y_true, y_pred, average='weighted')

recall = recall_score(y_true, y_pred, average='weighted')

f1 = f1_score(y_true, y_pred, average='weighted')

return accuracy, precision, recall, f1

 

# 进行五折交叉验证

cross_val_scores = cross_val_score(kmeans, X_train, y_train, cv=5)

print(f'五折交叉验证得分: {cross_val_scores}')

 

# 在训练集上评估模型

accuracy, precision, recall, f1 = evaluate_model(y_train, train_predictions)

print(f'训练集上的评估指标:\n准确度: {accuracy}\n精度: {precision}\n召回率: {recall}\nF1 : {f1}')

 

# 5. 在测试集上测试模型性能

test_predictions = kmeans.predict(X_test)

test_accuracy, test_precision, test_recall, test_f1 = evaluate_model(y_test, test_predictions)

 

print(f'测试集上的评估指标:\n准确度: {test_accuracy}\n精度: {test_precision}\n召回率: {test_recall}\nF1 : {test_f1}')

 

# 6. 计算轮廓系数以评估聚类效果

silhouette_avg = silhouette_score(X_test, test_predictions)

print(f'测试集轮廓系数: {silhouette_avg}')

 

 

 

   3. 训练结果截图(包括:准确率、精度(查准率)、召回率(查全率)、F1

 

 

四、实验结果分析

1. 测试结果截图(包括:准确率、精度(查准率)、召回率(查全率)、F1

 

 

2. 对比分析

交叉验证结果:

五折交叉验证的得分范围从0.9431.000,平均准确度接近1.000,说明模型在训练集的表现相当稳定。

训练集结果:

训练集上的评估指标均为0.973,显示模型能够在训练数据上很好地拟合,准确度、精度、召回率和F1值高度一致,表明了模型对各类样本的无偏识别能力。

测试集结果:

测试集上的所有评估指标均为0.960,仍然表明模型有很强的泛化能力,已成功识别出大部分样本。这种较高的值表明模型在未见过的数据上同样表现良好。

评估标准有效性:

在聚类问题中,准确度、精度、召回率和F1值是比较关键的指标,特别是在分类问题中。这里的聚类结果与真实标签进行了比较,因此可以对模型的分类效果进行评估。

轮廓系数(Silhouette Score):

测试集的轮廓系数为0.552,反映了聚类结果的相似性和良好分隔性。轮廓系数越接近1,表示聚类效果越好;接近0和负值则表示数据可以进行更好的聚合或分离。

posted on 2025-01-06 15:22    阅读(11)  评论(0)    收藏  举报