首页 > 其他分享 >2024.12.6(周五)

2024.12.6(周五)

时间:2024-12-02 16:56:33浏览次数:11  
标签:2024.12 f1 score labels 周五 train test cv

# 导入相关库
import numpy as np
from sklearn.datasets import load_iris
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.preprocessing import LabelEncoder
from sklearn.model_selection import StratifiedKFold

# (1)从 scikit-learn 库中加载 iris 数据集,使用留出法留出 1/3 的样本作为测试集
# 加载Iris数据集
iris = load_iris()
X = iris.data
y = iris.target

# 使用留出法将数据集分为训练集和测试集,比例为 2:1
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=1 / 3, random_state=42, stratify=y)

# (2)使用训练集训练 K 均值聚类算法,类别数为 3
kmeans = KMeans(n_clusters=3, random_state=42)
kmeans.fit(X_train)


# (3)使用五折交叉验证对模型性能进行评估
# 注意:对于 KMeans 聚类模型,需要做一些处理才能用交叉验证评估
# 因为 KMeans 是无监督学习算法,它的目标是将样本分成 K 个簇,并且簇的标签是无关的
# 所以我们需要将预测的簇标签与真实的标签进行映射。

# 交叉验证评分的评估指标
def clustering_metrics(true_labels, predicted_labels):
    # 对标签进行映射
    label_encoder = LabelEncoder()
    true_labels = label_encoder.fit_transform(true_labels)
    predicted_labels = label_encoder.transform(predicted_labels)

    # 计算评估指标
    accuracy = accuracy_score(true_labels, predicted_labels)
    precision = precision_score(true_labels, predicted_labels, average='weighted')
    recall = recall_score(true_labels, predicted_labels, average='weighted')
    f1 = f1_score(true_labels, predicted_labels, average='weighted')

    return accuracy, precision, recall, f1


# 五折交叉验证
cv = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
accuracies, precisions, recalls, f1_scores = [], [], [], []

for train_index, val_index in cv.split(X_train, y_train):
    X_cv_train, X_cv_val = X_train[train_index], X_train[val_index]
    y_cv_train, y_cv_val = y_train[train_index], y_train[val_index]

    # 训练 KMeans 模型
    kmeans.fit(X_cv_train)

    # 预测
    y_pred = kmeans.predict(X_cv_val)

    # 计算并记录评估指标
    accuracy, precision, recall, f1 = clustering_metrics(y_cv_val, y_pred)
    accuracies.append(accuracy)
    precisions.append(precision)
    recalls.append(recall)
    f1_scores.append(f1)

# 输出五折交叉验证的评估结果
print(f"交叉验证的平均准确率: {np.mean(accuracies):.4f}")
print(f"交叉验证的平均精度: {np.mean(precisions):.4f}")
print(f"交叉验证的平均召回率: {np.mean(recalls):.4f}")
print(f"交叉验证的平均F1值: {np.mean(f1_scores):.4f}")

# (4)使用测试集,测试模型的性能,对测试结果进行分析
# 使用训练好的 KMeans 模型对测试集进行预测
y_test_pred = kmeans.predict(X_test)

# 计算测试集上的评估指标
test_accuracy, test_precision, test_recall, test_f1 = clustering_metrics(y_test, y_test_pred)

# 输出测试集上的评估结果
print(f"测试集的准确率: {test_accuracy:.4f}")
print(f"测试集的精度: {test_precision:.4f}")
print(f"测试集的召回率: {test_recall:.4f}")
print(f"测试集的F1值: {test_f1:.4f}")

 

标签:2024.12,f1,score,labels,周五,train,test,cv
From: https://www.cnblogs.com/Sunyiran/p/18582189

相关文章

  • 2024.12.5(周四)
    #导入必要的库importnumpyasnpfromsklearnimportdatasetsfromsklearn.model_selectionimporttrain_test_split,cross_val_score,StratifiedKFoldfromsklearn.naive_bayesimportGaussianNBfromsklearn.metricsimportaccuracy_score,precision_score,reca......
  • 2024.12.9(周一)
    importnumpyasnpimportpandasaspdfromsklearnimportdatasetsfromsklearn.model_selectionimporttrain_test_split,cross_val_score,StratifiedKFoldfromsklearn.ensembleimportRandomForestClassifierfromsklearn.metricsimportaccuracy_score,prec......
  • 2024.11.29(周五)
    #导入必要的库importnumpyasnpfromsklearn.model_selectionimporttrain_test_split,cross_val_score,StratifiedKFoldfromsklearn.linear_modelimportLogisticRegressionfromsklearn.datasetsimportload_irisfromsklearn.metricsimportaccuracy_score,pr......
  • 2024.11.29 周五
    2024.11.29周五Q1.1200给定黑白保龄球a,b个,设合法摆放为:金字塔形状,每层个数1,2,3...,且每层颜色相同。问最多可合法摆放层数的数量。Q2.1400三种特定的木头长度18,21,25,一根长度为60的木头可以截成多段。分别需要n根长度为18,21,25的木头,问最少需要多少长度为60的木头。......
  • 2024.11.22(周五)
    当股票的价格上涨或下降5%时,会通知持有该股票的股民,当股民听到价格上涨的消息时会买股票,当价格下降时会大哭一场。实验要求:1.    画出对应类图;2.    提交源代码;3.    注意编程规范。  1、类图  2、源代码#include<iostream>#include<list>using......
  • 周五学习 -2024/9/20
    今天9月20日,出发去徐州!HashMapHashMap的特点HashMap底层是哈希表结构的依赖hashCode方法和equals方法保证键的唯一如果键存储的是自定义对象,需要重写hashCode和equals方法DQL-分页查询SELECT字段列表FROM表名LIMIT起始索引,查询记录数;注意:起始索引从0开始,......
  • 2024.9.13(周五)
    完成机器学习查询数据集的作业数据集名称样本数属性属性个数标签任务Iris数据集150花萼长度,花萼宽度,花瓣长度,花瓣宽度4鸟类(Setosa,Versicolor,Virginica)分类MNIST数据集70,000像素值(28x28像素)784手写数字(0-9)分类Titanic数据集891乘客ID,船舱......
  • 近期 5中4 周五意甲:国际米兰VS亚特兰大 比赛分析,比分预测 免费获取。公推一路红
    国际米兰,作为意甲的传统豪门,一直以来都以强大的实力和坚韧的斗志著称。球队拥有着一批世界级的球星,他们在各个位置上都具备出色的能力。国际米兰的进攻火力十分强大,前锋们具备出色的射门技术和门前嗅觉,能够在关键时刻为球队攻城拔寨。中场球员们则掌控着比赛的节奏,通过精准的传......
  • 8.9第四周周五学习总结
    1最小生成树(讲课)【金山文档|WPS云文档】最小生成树https://kdocs.cn/l/cnDfoEEJS694prim模板(不常用)#include<bits/stdc++.h>usingnamespacestd;//#defineintlonglongconstintN=1100;constintmod=998244353;vector<int>v[N];#defineINF0x3f3f3f3f......
  • 7.20周五总结
    上午vjcon3补题vj3优先队列维护贪心取一个数的各位只需要a/100%10,a/10%10,a%10;去重bool(intn){set<int>st;for(intj=0;j<n;j++){st.insert(a[i][j]);}if(st.size()!=n)return1;return0;}中位数(思维)#i......