【python】KNN模型训练及应用01

2023-10-30

目的应用:让电脑代替人工对图片分类

1.数据加载

from sklearn.datasets import load_iris
from sklearn.model_selection import  train_test_split
from sklearn.neighbors import  KNeighborsClassifier
import pandas as pd
# 1.数据加载
iris=load_iris()

2. DataFrame 使用花萼长、花萼宽、花瓣长、花瓣宽 作为列名

# 2.二维--使用花萼长、花萼宽、花瓣长、花瓣宽 作为列
pd_data = pd.DataFrame(iris["data"], columns=iris.feature_names)
print(pd_data.head())

3.加入label:将iris.target值赋给label加进pd_data

# 3.加入label:将iris.target值赋给label加进pd_data
pd_data["label"] = iris.target
print(pd_data.head(6), pd_data.shape)

 4.数据打乱 特征、标签在同一行

# 4.数据打乱 特征、标签在同一行
df = shuffle(pd_data)
print(df.head())

 5.索引重新排序 reset_index

df.reset_index(drop=True, inplace=True)
print(df.head(10), df.shape)

 6.数据分割 

x = df.iloc[:, :4].values  # 转换为ndarray
print(x)
# 标签   拍平 多维转一维
# y = df.iloc[:, 4:].values  # 中括号太多,不符合数据格式
y = np.ravel(df.iloc[:, 4:].values)
print(y, y.shape, type(y))

 7.测试集20% 训练集120 测试集30

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=6)

8、超参数k为邻居个数,如何找出最优k以及对应最高评分的呢?先定义一个best_k,给初始值为-1,循环让一个k值取3-12,求对应的score,找出最大的score,对应的k也就是best_k.

# k初始值为-1
best_k = -1  # 邻居 如何得到一半的邻居 k要小于数据个数的平方根
best_score = 0 # 最高评分
for k in range(3, 13):
    # 创建出每一个k对应的模型
    # for p in range(1, 8):
    knn_model = KNeighborsClassifier(n_neighbors=k)
    knn_model.fit(x_train, y_train)
    score = knn_model.score(x_test, y_test)
    if best_score < score:  # 如果bestscore小于score
        best_score = score
        best_k = k
        # p = p
print("best_k:",best_k,"best_sc:", best_score)

可以得出最大score为0.9666666...,对应的最优best_k则为7。用这个k代入进去训练模型、评分、预测。

print("best_k:", best_k, "best_sc:", best_score)
knn_model = KNeighborsClassifier(n_neighbors=best_k)
knn_model.fit(x_train,y_train)
score = knn_model.score(x_test, y_test)
y_predict = knn_model.predict(x_test)
print(y_predict)
print(y_test)
print(y_predict == y_test)  #是否相等,布尔值判断

得出最优k,还要求best_p(距离的导数)。定义best_p初始化为1,加入p循环、p参数,求最优p。

# k初始值为-1
best_k = -1  # 邻居 如何得到一半的邻居 k要小于数据个数的平方根
best_p = 1
best_score = 0 # 最高评分
W = ['uniform', 'distance']
for k in range(3, 13):
    # 创建出每一个k对应的模型
    for p in range(1, 8): # 表示求和次方数
        knn_model = KNeighborsClassifier(n_neighbors=k, p=p)
        knn_model.fit(x_train, y_train)
        score = knn_model.score(x_test, y_test)
        if best_score < score:  # 如果bestscore小于score
            best_score = score
            best_k = k
            best_p = p
print("best_k:", best_k, "best_sc:", best_score,"best_p:",best_p)
knn_model = KNeighborsClassifier(n_neighbors=best_k, p=best_p)
knn_model.fit(x_train,y_train)
score = knn_model.score(x_test, y_test)
y_predict = knn_model.predict(x_test)
print(y_predict)
print(y_test)
print(y_predict == y_test)  #是否相等,布尔值判断

最优p为2.

 还有超参best_weight。定义初始化,求最优解。

# k初始值为-1
best_k = -1  # 邻居 如何得到一半的邻居 k要小于数据个数的平方根
best_p = 1
best_score = 0 # 最高评分
W = ['uniform', 'distance']
weight = ''
for k in range(3, 13):
    # 创建出每一个k对应的模型
    for p in range(1, 8): # 表示求和次方数
        for w in W:
            knn_model = KNeighborsClassifier(n_neighbors=k, p=p, weights=w)
            knn_model.fit(x_train, y_train)
            score = knn_model.score(x_test, y_test)
            if best_score < score:  # 如果bestscore小于score
                best_score = score
                best_k = k
                best_p = p
                weight = w
print("best_k:", best_k, "best_sc:", best_score,"best_p:",best_p, "weight:",weight)
knn_model = KNeighborsClassifier(n_neighbors=best_k, p=best_p, weights=w)
knn_model.fit(x_train,y_train)
score = knn_model.score(x_test, y_test)
y_predict = knn_model.predict(x_test)
print(y_predict)
print(y_test)
print(y_predict == y_test)  #是否相等,布尔值判断

算出所有最优超参。

完整代码:

mport numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import  train_test_split
from sklearn.neighbors import  KNeighborsClassifier
import pandas as pd
# 1.数据加载
from sklearn.utils import shuffle

iris = load_iris()
# 2.二维--使用花萼长、花萼宽、花瓣长、花瓣宽 作为列
pd_data = pd.DataFrame(iris["data"], columns=iris.feature_names)
print(pd_data.head())
# 3.加入label:将iris.target值赋给label加进pd_data
pd_data["label"] = iris.target
print(pd_data.head(6), pd_data.shape)

# 4.数据打乱 特征、标签在同一行
df = shuffle(pd_data)
print(df.head())

# 5.索引重新排序  reset_index
df.reset_index(drop=True, inplace=True)
print(df.head(10), df.shape)

# 6.数据分割  特征---前四列 标签
x = df.iloc[:, :4].values  # 转换为ndarray
print(x)
# 标签   拍平 多维转一维
# y = df.iloc[:, 4:].values  # 中括号太多,不符合数据格式
y = np.ravel(df.iloc[:, 4:].values)
print(y, y.shape, type(y))
# 7.测试集20% 训练集120 测试集30
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=6)
# k初始值为-1
best_k = -1  # 邻居 如何得到一半的邻居 k要小于数据个数的平方根
best_p = 1
best_score = 0 # 最高评分
W = ['uniform', 'distance']
weight = ''
for k in range(3, 13):
    # 创建出每一个k对应的模型
    for p in range(1, 8): # 表示求和次方数
        for w in W:
            knn_model = KNeighborsClassifier(n_neighbors=k, p=p, weights=w)
            knn_model.fit(x_train, y_train)
            score = knn_model.score(x_test, y_test)
            if best_score < score:  # 如果bestscore小于score
                best_score = score
                best_k = k
                best_p = p
                weight = w
print("best_k:", best_k, "best_sc:", best_score,"best_p:",best_p, "weight:",weight)
knn_model = KNeighborsClassifier(n_neighbors=best_k, p=best_p, weights=weight)
knn_model.fit(x_train,y_train)
score = knn_model.score(x_test, y_test)
y_predict = knn_model.predict(x_test)
print(y_predict)
print(y_test)
print(y_predict == y_test)  #是否相等,布尔值判断

 这种操作方法很麻烦。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【python】KNN模型训练及应用01 的相关文章

随机推荐

  • 【小结】从输入URL到页面显示发生了什么?(二)渲染

    本文总结从输入URL到页面显示的第二部分内容 渲染 从拿到HTML资源到显示的过程 主要过程 构建DOM树 样式计算 分成三步 把 CSS 转换为浏览器能够理解的结构 styleSheets 转换样式表中的属性值 使其标准化 计算出 DOM
  • yuv图解(YUV444,YUV422,YUV420,YV12,NV12,NV21)

    参考文章 图解YUV YUV是什么 YUV 444 422 420 And YUV Packed Planar Semi Planar 知识点 YUV是用一个称为Y 相当于灰度 的亮度分量和两个色度分量表示 分别称为U 蓝色投影 和V 红色
  • Cgroups----限制kvm虚拟机

    Cgroups 限制kvm虚拟机 Cgroups相关概念及其关系 相关概念 1 任务 task 在cgroups中 任务就是系统的一个进程 2 控制族群 control group 控制族群就是一组按照某种标准划分的进程 Cgroups中的
  • 查看mysql版本的六种方法

    1 root localhost mysql V 2 root localhost mysql help grep Distrib 在mysql下有四种 3 登陆时会显示 4 mysql gt status 5 mysql gt selec
  • 中阳:ChatGPT横空出世,或迎来“安卓时刻”

    ChatGPT横空出世 写代码 写情书 写文章 做题 它啥都会 会被人工智能替代的行业 由人工智能实验室OpenAI发布的对话式大型语言模型ChatGPT在各大中外媒体平台掀起了一阵狂热之风 继 AI 绘画之后 由 OpenAI 上线的 C
  • Reference vs Pointer

    参考自Dan Saks的文章 An Introduction to References References and const The key insights I believe the key insight into why C
  • 用git和idea推送本地项目到远程仓库

    方式一 git命令方式 1 鼠标右键 Git Bash Here 2 初始化仓库 git init 3 配置签名 git config user name Zhang3 git config user email zhang3 163 co
  • WebFlux出现接口已返回成功,但查询时数据未改变的问题

    问题描述 在使用WebFlux时遇到一个很奇怪的问题 先调用禁用账号接口 接着在进行查询该数据 结果页面显示数据未改变 在点一次时页面数据才刷新 即连续点两次查询接口 才能看到修改后的数据 相关代码 前端 const disableAcco
  • 商城登录后端

    二 登录 1 用户名和密码 用户名和密码的格式验证可以不需要在后端进行 在前端服务器判断就可以 2 图片验证码与验证 import string redis from captcha image import ImageCaptcha cl
  • Email Error - You have exceeded the storage limit on your mailbox

    Description You may receive an error You have exceeded the storage limit on your mailbox Delete some items from your mai
  • 前端--三种插件用来解析mardowm,转化成为html语法

    前端 三种插件用来解析mardowm 转化成为html语法 使用方式十分简单 快捷 参考地址 1 markdown js 下载地址 https github com evilstreak markdown js div div
  • IBCS虚拟专线公网IP在公司内部搭建ERP系统按教程

    企业资源计划 ERP 系统是现代企业不可或缺的组成部分 可以将各个业务领域的信息整合到一个系统中 以实现信息共享 协调和协作 然而 随着企业规模的扩大 企业的ERP系统也需要相应地进行升级和扩展 因此 使用IBCS虚拟专线公网IP在公司内部
  • 五. Zuul 限流

    目录 一 spring cloud zuul ratelimit 基础解释 二 实现案例 1 pom 添加依赖 2 yml 配置 3 redis 配置类 4 自定义Zuul过滤器 5 自定义限流策略key 6 在当前Zuul服务中编写Con
  • string查找和替换

    string查找和替换 查找 查找指定字符串是否存在 替换 在指定的位置替换字符串 函数原型 int find const string str int pos 0 const 查找str第一次出现位置 从pos开始查找 int find
  • python读取串口数据 绘图_3.使用串口读取IMU数据并通过话题发布

    0x00 简介 我们的IMU扩展板是支持通过串口方式来读取IMU数据 现在代码已经开发完成 前面文章介绍的都是将IMU板插在树莓派上 然后使用树莓派的IIC接口来数据通信 因此不需要额外接线就可以发布imu话题的 若使用串口进行通信的话 若
  • 在Linux下安装jdk的步骤

    1 下载安装包 http www oracle com technetwork java javase downloads jdk8 downloads 2133151 html 版本 jdk 8u191 linux x64 tar gz
  • 确实卷,公司新来的00后卷王,我们这帮老油条真干不过.....

    都说00后躺平了 但是有一说一 该卷的还是卷 这不 前段时间我们公司来了个00后 工作没两年 跳槽到我们公司起薪18K 都快接近我了 后来才知道人家是个卷王 从早干到晚就差搬张床到工位睡觉了 最近和他聊了一次天 原来这位小老弟家里条件不太好
  • C#反编译工具:ILSpy

    参考 反编译软件ILSpy的使用教程 TONY5388的博客 CSDN博客 ilspy exe 总结 以前以为dnspy是反编译的 结果发现iLSpy是真的好用 可以选择生成不同C 版本的源码
  • SQLite数据库总结

    参考网址 https www cnblogs com stephen liu74 archive 2012 02 29 2328348 html 3种工作模式 1 SQLite完全内存数据库 在SQLite中 数据库通常是存储在磁盘文件中的
  • 【python】KNN模型训练及应用01

    目的应用 让电脑代替人工对图片分类 1 数据加载 from sklearn datasets import load iris from sklearn model selection import train test split fro