计算思维与数据科学 KNN分类建模

该实验主要进行了鲍鱼数据的离散化处理,将'性别'列转换为哑变量。接着,按照8:2和5:5的比例划分了训练集和测试集,并对数据进行了标准化。然后,利用KNN算法构建分类模型,对测试集鲍鱼的年龄进行预测,评估了预测的准确率,并通过图形化展示比较了不同训练集/测试集比例下的预测效果。
摘要由CSDN通过智能技术生成

二、实验主要内容
离散化鲍鱼数据。
划分训练集与测试集,并标准化数据。
构建分类模型。
三、实验仪器设备
Windows
Anaconda
Spyder
四、实验步骤
1、离散化鲍鱼数据
由于原始数据中”sex”一列取值为字符,无法进行数学运算,将该列转换为哑变量。
2、划分训练集与测试集
1)分别按照8:2和5:5的比例划分训练集和测试集;
2)对训练集和测试集进行标准化;
3、构建分类模型
1)构建KNN模型;
2)训练KNN模型,预测测试集鲍鱼的年龄;对年龄预测结果进行准确率分析并做图形化展示;对比不同训练集/测试集比例下的预测结果并做图形化展示。
实验代码

import pandas as pd
import numpy as np
data = pd.read_csv('C://Users//ASUS//Desktop//abalone.data')
data1 = pd.get_dummies(data['sex'])

data = data.drop(['sex'],axis=1)
data.insert(0,'F',data1['F'])
data.insert(1,'I',data1['I'])
data.insert(2,'M',data1['M'])

data_index = data[data['rings']==1].index.tolist()[0]
a =data["rings"].value_counts() / len(data)
data_rings = data['rings']
print(data_rings.describe())
data2=data.iloc[data['rings'],[ 0,1,2,3,4,5,6,7,8,9]]

data2 = np.array(data2)
print(data2)
print('数据集的形状为:',data2.shape)
print(type(data2))

data_rings = np.array(data["rings"])
print(data_rings)
print(type(data_rings))

print(data2)
print(data_rings)

print('数据集的形状为:',data_rings.shape)
"""
for train_index, test_index in ss.split(data2, data_rings):
    print("TRAIN_INDEX:", train_index, "TEST_INDEX:", test_index)#获得索引值
    X_train, X_test = data2[train_index], data2[test_index]#训练集对应的值
    y_train, y_test = data_rings[train_index], data_rings[test_index]#类别集对应的值
"""
from sklearn.model_selection import train_test_split
data2_train,data2_test,data_rings_train,data_rings_test = \
train_test_split(data2,data_rings,
      test_size = 0.2,random_state = 22)
print('训练集数据的形状为:',data2_train.shape)
print('训练集标签的形状为:',data_rings_train.shape)
print('测试集数据的形状为:',data2_test.shape)
print('测试集标签的形状为:',data_rings_test.shape) 
from sklearn.neighbors import KNeighborsClassifier 
# 定义一个距离判别分类器对象
knn = KNeighborsClassifier()
#k近邻算法,有监督学习,分类算法
# 调用该对象的训练方法,主要接收两个参数:训练数据集及其样本标签
knn.fit(data2_train, data_rings_train)  

# 调用该对象的测试方法,主要接收一个参数:测试数据集
data_rings_predict = knn.predict(data2_test)
# 输出测试数据集的预测标签
print('测试数据集的预测标签为:\n ', 
      [data_rings_predict])
print('测试数据集的正确标签为:\n ', 
      [data_rings_test])
data_T = []
data_F = []
for i in range(0,len(data_rings_predict)):
    if data_rings_predict[i] == data_rings_test[i]:
        data_T.append(data_rings_predict[i])
    else:
        data_F.append(data_rings_predict[i])
print('预测正确的数据为:',data_T)
print('预测错误的数据为',data_F)

print(len(data_T))
print(len(data_F))
print('准确率为:',len(data_T)/(len(data_T)+len(data_F)))
import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.figure()
labels = ["预测正确数据", "预测错误数据"]
fracs = [len(data_T),len(data_F)]
plt.title('预测结果展示图')
exp = [0.05,0.2]
plt.pie(x=fracs,labels=labels,explode=exp,shadow=True)
plt.show()
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值