数据分析与挖掘-KNN算法-3模型评估之样本集拆分-拆分策略-优化

import warnings

import numpy as np
import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_iris

matplotlib.use('TkAgg')
warnings.filterwarnings("ignore",category=UserWarning)

#准备数据
iris = load_iris()
data = iris.data
target=iris.target

#拆分样本集
def stt(train_size,seed):
    #数据数种子
    np.random.seed(seed)
    #获得打乱的索引
    random_index = np.random.permutation(target.size)

    # 数据预处理
    X = data[random_index]
    y = target[random_index]
    # 拆分策略
    n_split = int(y.size*train_size) #拆分策略 train_size=0.1, 0.2, 0.3........
    # 训练集
    x_train = X[:n_split]
    y_train = y[:n_split]
    # 测试集
    x_test = X[n_split:]
    y_test = y[n_split:]

    return x_train, y_train, x_test, y_test

#模型评价
def acc_mean(knn,train_size,times):
    train_acc_list = []
    test_acc_list = []

    #循环拆分 times 次 得到不同的样本拆分集  用于得到评分
    for i in range(times):
        x_train, y_train, x_test, y_test = stt(train_size,i)
        #训练
        knn.fit(x_train, y_train)
        #测试
        y_ = knn.predict(x_test)
        #训练集评分
        train_acc = knn.score(x_train,y_train)
        train_acc_list.append(train_acc)
        #测试集评分
        test_acc = knn.score(x_test, y_test)
        test_acc_list.append(test_acc)
    #训练集评分 平均数
    train_mean = np.array(train_acc_list).mean()
    #测试集评分 平均数
    test_mean = np.array(test_acc_list).mean()
    return train_mean,test_mean


k_list = np.arange(1,int(np.sqrt(target.shape[0])+10),2) #[1 3 5 7 9 11]

k_train_mean=[]
k_test_mean=[]
for k in k_list:
    knn = KNeighborsClassifier(n_neighbors=k)
    train_mean,test_mean = acc_mean(knn,0.8,100)
    k_train_mean.append(train_mean)
    k_test_mean.append(test_mean)
# print(k_train_mean)
# print(k_test_mean)

#绘制学习曲线
plt.plot(k_list,k_train_mean,label = "acc_train_mean")
plt.plot(k_list,k_test_mean,label = "acc_test_mean")

plt.xlabel("k_list",fontsize=15)
plt.ylabel("acc",fontsize=15)

plt.xticks(k_list) #刻度标签
plt.legend() #显示图例
plt.show()
#散点图plt.scatter(X[""],X[""],c = target)
#绘制评分差值图形
# plt.plot(k_list,np.array(k_train_mean)-np.array(k_test_mean))
# plt.xticks(k_list)
# plt.show()

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
K-Pop Groups Dataset 数据可以使用knn(K最近邻)算法进行分类或回归任务。knn算法是一种基于实例的学习方法,它通过计算样本之间的距离来进行分类或回归。以下是一个使用Python语言和Scikit-learn库来构建knn分类模型的示例代码: ``` import pandas as pd from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score # 加载数据 data = pd.read_csv("kpop_groups.csv") # 特征选择 X = data[['Members', 'Debut Year', 'Social Media Popularity']] y = data['Music Genre'] # 拆分数据 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) # 训练knn分类模型 model = KNeighborsClassifier(n_neighbors=5) model.fit(X_train, y_train) # 预测测试 y_pred = model.predict(X_test) # 评估模型性能 accuracy = accuracy_score(y_test, y_pred) print("Accuracy: ", accuracy) ``` 此代码使用 Scikit-learn 中的 KNeighborsClassifier 类来构建一个knn分类模型。首先,我们选择团体成员数、出道年份和社交媒体受欢迎程度作为特征,音乐风格作为目标变量。然后,我们将数据拆分为训练和测试,并使用训练训练knn模型。最后,我们使用测试进行预测,并计算准确性得分来评估模型的性能。 请注意,knn算法的性能取决于k值的选择,因此您可能需要尝试不同的k值来获得更好的结果。此外,knn算法数据中的噪声和异常值非常敏感,因此您可能需要对数据进行清理和预处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值