KNN模型

news2024/10/7 18:31:33
使用K-Nearest Neighbors (KNN)算法进行分类。首先加载一个数据集,然后进行预处理,选择最佳的K值,并训练一个KNN模型。
# encoding=utf-8
import numpy as np
datas = np.loadtxt('datingTestSet2.txt')  # 加载数据集,返回一个numpy数组
# 提取特征和标签
x_data = datas[:, 0:3]  # 提取前三列数据作为特征
y_data = datas[:, 3]  # 提取第四列数据作为标签
print('标准化前:', x_data)  # 特征矩阵
print(y_data)  # 标签向量
# 数据maxmin标准化
from sklearn.preprocessing import MinMaxScaler  # 用于数据的标准化
std = MinMaxScaler()  # 创建一个MinMaxScaler对象
x_data = std.fit_transform(x_data)  # 标准化
print('标准化:', x_data)
# 拆分数据集(训练集和测试集)
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x_data, y_data, test_size=0.2,
                                                    random_state=123)  # 测试集占总数据的20%,随机种子设为123以保证结果的可重复性
# 建立KNN模型
from sklearn.neighbors import KNeighborsClassifier
# 使用交叉验证法评估模型性能
from sklearn.model_selection import cross_val_score
k_range = range(1, 31)  # 创建一个范围从1到30的序列,用于试验不同的K值。
k_error = []  # 创建一个空列表,用于存储每个K值对应的错误率。
# 找最合适的k,既平均值最高
for k in k_range:
    model_kun = KNeighborsClassifier(n_neighbors=k)
    scores = cross_val_score(model_kun, x_train, y_train, cv=6, scoring="accuracy") 
    # 将数据集分成6个子集
    # 估计方法对象 数据特征 数据标签 几折交叉验证
    meanscores = scores.mean()  # 平均值
    k_error.append(1 - meanscores)  # 将准确率的平均值转换为错误率
    print("k=", k, "meanscores=", meanscores)
# 可视化K值和错误率的关系
import matplotlib.pyplot as plt
plt.plot(k_range, k_error)  # 绘制K值与错误率的图像
plt.show()
# 建立KNN分类器模型,并使用训练集进行训练
model_kun = KNeighborsClassifier(n_neighbors=9)  # n_neighbors=9表示在预测时,KNN分类器将考虑最近的9个邻居,并根据这9个邻居中最常见的类别来预测输入样本的类别
model_kun.fit(x_train, y_train)  # 使用训练集对模型进行训练
scores = model_kun.score(x_test, y_test)  # 使用测试集评估模型性能,返回准确率
print('准确率为:', scores)

 

 

 

 

 使用KNN算法加载鸢尾花数据集

# 加载鸢尾花数据集
from sklearn.datasets import load_iris

iris = load_iris()
print(iris)
x_data = iris.data  # 样本数据
y_data = iris.target  # 标签数据
print("标准化前:", x_data)


# 数据maxmin标准化
from sklearn.preprocessing import MinMaxScaler

mms = MinMaxScaler()
x_data = mms.fit_transform(x_data)
print(x_data)

# 拆分数据集(训练集和测试集)
from sklearn.model_selection import train_test_split

x_train, x_test, y_train, y_test = train_test_split(x_data, y_data,   test_size=0.2,random_state=123)

# 建立knn模型
from sklearn.neighbors import KNeighborsClassifier

from sklearn.model_selection import cross_val_score

k_range=range(1,31)
k_error=[] #错误率

# 找最合适的k,既平均值最高
for k in k_range:
    model_kun=KNeighborsClassifier(n_neighbors=k)
    scores=cross_val_score(model_kun,x_train,y_train,cv=6,scoring="accuracy")
    # 估计方法对象 数据特征 数据标签 几折交叉验证
    meanscores=scores.mean()    # 平均值
    k_error.append(1-meanscores)    # 错误率
    print("k=",k,"meanscores=",meanscores)

# 将k的值和错误率可视化出来,比较好找
import matplotlib.pyplot as plt
plt.plot(k_range,k_error)
plt.show()

model_knn = KNeighborsClassifier(n_neighbors=10)

model_knn.fit(x_train, y_train)
scores = model_knn.score(x_test, y_test)  # 准确率
print(scores)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1155546.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

68 内网安全-域横向PTHPTKPTT哈希票据传递

目录 演示案例:域横向移动PTH传递-Mimikatz域横向移动PTK传递-Mimikatz域横向移动PTT传递-MS14068&kekeo&local国产Ladon内网杀器测试验收-信息收集,连接等 涉及资源: PTH(pass the hash) #利用lm或ntlm的值进行的渗透测试 PTT(pass the ticket) #利用的票据凭证TGT进行…

餐饮连锁品牌2023:端起“外卖碗”,吃上“下沉饭”

作者 | 陈小江 文 | 螳螂观察 “没想到,蜜雪(蜜雪冰城)能到我们这乡镇来开,我觉得挺意外的。「柏记水饺」也算挺大一品牌,没想到也能来(我们)乡镇”。 谈起不断有连锁品牌进镇开店,黑龙江讷河…

算法笔记【3】-冒泡排序法

文章目录 一、原理二、代码实现三、算法特点 一、原理 冒泡排序是一种简单但有效的排序算法,它可以用于对数字进行升序排序。该算法通过多次比较相邻元素并交换位置来实现排序的目的。冒泡排序的基本思想是从第一个元素开始,依次比较相邻的两个元素&…

python 练习 在列表元素中合适的位置插入 输入值

目的: 有一列从小到大排好的数字元素列表, 现在想往其插入一个值,要求: 大于右边数字小于左边数字 列表元素: [1,4,6,13,16,19,28,40,100] # 方法: 往列表中添加一个数值,其目的方便元素位置往后…

ardupilot开发 --- 深度相机 篇

1. ZED 相机 1.1 规格 2. RealSense 需要机载计算机作为中介!!

【HarmonyOS】低代码平台组件拖拽使用技巧之网格布局

【关键字】 HarmonyOS、低代码平台、组件拖拽、网格布局 1、写在前面 前面分享了在低代码平台上使用堆叠容器和滚动容器的组件拖拽使用技巧,本篇我们继续来学习其它组件的使用,今天为大家介绍的是网格布局的使用,需要注意的是,网…

NLP之LSTM与BiLSTM

文章目录 代码展示代码解读双向LSTM介绍(BiLSTM) 代码展示 import pandas as pd import tensorflow as tf tf.random.set_seed(1) df pd.read_csv("../data/Clothing Reviews.csv") print(df.info())df[Review Text] df[Review Text].astyp…

【Linux进程控制】进程控制专篇

【Linux进程控制】进程控制专篇 目录 【Linux进程控制】进程控制专篇进程创建fork函数写实拷贝fork常规用法fork调用失败的原因 进程终止进程退出场景进程常见退出方法_exit函数return退出 进程等待进程等待必要性进程等待的方法获取子进程status 具体代码实现进程程序替换替换…

3.5 队列的表示和操作的实现

思维导图: 3.5.1 队列类型 3.5.1 队列的类型定义 1. 简介 队列是一种特殊的线性表,它的特性是只能在表的一端进行插入操作,而在另一端进行删除操作。通常将允许插入操作的一端称为队尾,允许删除操作的一端称为队头。 2. 抽象…

ArcGIS计算土地现状容积率

本文讲解在ArcGIS中,基于建筑数据和地籍边界数据,计算土地容积率。 一、容积率介绍 容积率(Plot Ratio/Floor Area Ratio/Volume Fraction)是指一个小区的地上建筑总面积与净用地面积的比率。又称建筑面积毛密度。 二、数据分析 (1)建筑数据(dwg) (2)地籍边界数据…

VsCode 只有一个标签页 编辑区只能打开一个文件

产生如图所示的问题: 可能是不小心取消了勾选 勾选,Show Tabs

软件安利——火绒安全

近年来,以优化、驱动、管理为目标所打造的软件屡见不鲜,大同小异的电脑管家相继走入了公众的视野。然而,在这日益急功近利的社会氛围驱动之下,真正坚持初心、优先考虑用户体验的电脑管家逐渐湮没在了浪潮之中。无论是鲁大师&#…

Enfocus PitStop Pro 2022(Acrobat dc增强)

Enfocus PitStop Pro 2022是一款Acrobat dc PDF编辑和校对工具,为Mac用户提供了强大的功能和精确的控制,以确保PDF文件的质量和准确性。该软件具有全面的PDF编辑功能,包括添加、删除或重新排列页面,合并和分割PDF文件,…

工程中Http的请求、各种回调函数的使用

文章目录 1、登录回调以及各种函数的使用1、SdoLoginClient工程中的SdoBase_Initialize3接口2、LoginClient中的Initialize接口3、ProcessResponse调用ProcessLoginResponse传递参数给回调函数使用4、ProcessLoginResponse登录响应接口的使用5、ProcessResponse调用然后根据req…

四、[mysql]索引优化-1

目录 前言一、场景举例1.联合索引第一个字段用范围查询不走索引(分情况)2.强制走指定索引3.覆盖索引优化4.in和or在表数据量比较大的情况会走索引,在表记录不多的情况下会选择全表扫描5.like 后% 一般情况都会走索引(索引下推) 二、Mysql如何选择合适的索…

中移链浏览器简介

(1)简介 生活中,常用的互联网浏览器,是用来检索、展示以及传递Web信息资源的应用程序。用浏览器进行搜索,可以快速查找到目标信息。而对于区块链而言,也有区块链浏览器。 区块链浏览器,是指为用…

【案例实战】NodeJS+Vue3+MySQL实现列表查询功能

这篇文章,给大家带来一个列表查询的功能,从前端到后端的一个综合案例实战。 采用vue3作为前端开发,nodejs作为后端开发。 首先我们先来看一下完成的页面效果。点击分页,可以切换到上一页、下一页。搜索框可以进行模糊查询。 后端…

17.基干模型Swin-Transformer解读

文章目录 SWin-Transformer解读1.基础介绍关于Shifted Window based Self-Attention相对位置偏置网络整体结构和层级特征欢迎访问个人网络日志🌹🌹知行空间🌹🌹 SWin-Transformer解读 1.基础介绍 Swin-Transformer是2021年03月微软亚洲研究院提交的论文中提出的,比V…

【Linux】常见指令以及具体其使用场景

君兮_的个人主页 即使走的再远,也勿忘启程时的初心 C/C 游戏开发 Hello,米娜桑们,这里是君兮_,随着博主的学习,博主掌握的技能也越来越多,今天又根据最近的学习开设一个新的专栏——Linux,相信Linux操作系…