人工智能入门——机器学习小案例(三)

1、模型评估流程

  1. 评估流程#1:将整个数据集用于训练和测试
    步骤1:使用整个数据集进行模型训练
    步骤2:使用相同的数据集进行测试,并通过对比预测结果与实际结果来评估模型表现
    训练数据与测试数据相同导致得问题
    ①训练模型得最终目标是为了预测新数据对应得结果,而此时没有新数据
    ②最大化训练准确率通常会导致模型复杂化(如增加维度等),因此将降低模型的通用性
    ③过度复杂模型容易导致训练数据的过度拟合(绿色线)
    在这里插入图片描述
    准确率:正确预测的比例,用于评估分类模型表现得常用指标
  2. 评估流程#2:分离训练数据与测试数据
    步骤1:把数据分成两部分:训练集测试集
    步骤2:使用训练集数据进行模型训练
    步骤3:使用测试集数据进行预测,从而评
    估模型表现
  3. 模型关键参数选择
    目标:确定合适的参数(组),提高模型预测准确率
    方法
    ① 遍历参数组合,建立对应的模型
    ② 使用训练集数据进行模型训练
    ③使用测试集数据进行预测,评估每个模型的表现
    ④ 通过图型展示参数(组)与准确率的关系,确定合适的参数(组)

2、实操过程

1、将整个数据集用于训练和测试
① 通过sklearn自带数据包加载iris数据

from sklearn import datasets
iris = datasets.load_iris()
x = iris.data
y = iris.target

② 模型调用

from sklearn.neighbors import KNeighborsClassifier
knn_5 = KNeighborsClassifier(n_neighbors=5)
knn_5.fit(x,y)
y_pred = knn_5.predict(x)
print(y_pred)
print(y_pred.shape)

结果:
模型调用
③ 准确率计算

from sklearn.metrics import accuracy_score
# 计算k=5时的准确率
print(accuracy_score(y,y_pred))
# 计算k=1时的准确率
knn_1 = KNeighborsClassifier(n_neighbors=1)
knn_1.fit(x,y)
y_pred = knn_1.predict(x)
print(accuracy_score(y,y_pred))

结果:
k=5时的准确率
k=1时的准确率
2、分离训练数据与测试数据
① 分离数据,分成四个部分,分别时训练输入数据、预测输入数据、训练的结果、预测的结果

from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size = 0.4)

② 分离后数据的维度确认

print(x_train.shape,x_test.shape,y_train.shape,y_test.shape)

结果:
分离后数据的维度确认

③ 分离后数据集的训练与评估

knn_5_s = KNeighborsClassifier(n_neighbors=5)
knn_5_s.fit(x_train,y_train)
y_train_pred = knn_5_s.predict(x_train)
y_test_pred = knn_5_s.predict(x_test)
# 分离后模型预测的准确率
print(accuracy_score(y_train,y_train_pred))
print(accuracy_score(y_test,y_test_pred))

结果:
在这里插入图片描述
在这里插入图片描述
④ 令k:1-25,遍历所有有可能的参数组合

k_range = list(range(1,26))
print(k_range)

在这里插入图片描述

score_train = []
score_test = []
for k in k_range:
    knn = KNeighborsClassifier(n_neighbors = k)
    knn.fit(x_train,y_train)
    y_train_pred = knn.predict(x_train)
    y_test_pred = knn.predict(x_test)
    score_train.append(accuracy_score(y_train,y_train_pred))
    score_test.append(accuracy_score(y_t

for k in k_range:
    print(k,score_train[k-1])

for k in k_range:
    print(k,score_test[k-1])

结果:
score_train
score_test
⑤ 图像直观展示

# 图形展示
# 导入Matplotlib图库并使用图像在notebook中展示
import matplotlib.pyplot as plt
%matplotlib inline
# 展示k值与训练数据集预测准确率之间的关系
plt.plot(k_range,score_train)
plt.xlabel('K(KNN model)')
plt.ylabel('Training Accuracy')

# 展示k值与测试数据集预测准确率之间的关系
plt.plot(k_range,score_test)
plt.xlabel('K(KNN model)')
plt.ylabel('Training Accuracy')

结果:
k值与训练数据集预测准确率之间的关系
k值与测试数据集预测准确率之间的关系
⑥ 对新数据进行预测
从图像上可知,k=11时复杂度较小且准确率较高,选择k=11进行预测

knn_11 = KNeighborsClassifier(n_neighbors=11)
knn_11.fit(x_train,y_train)
y_train_pred = knn_11.predict([[1,2,3,4]])
print(y_train_pred)

结果:
k=11预测结果

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值