KNN算法实例——鸢尾花种类预测

2023-11-04

线性回归的scikit-learn实现

scikit-learn中提供了一个KNeighborClassifier类来实现k近邻法分类模型

方法:

fit(X,y):训练模型
predict:使用模型来预测,返回待预测样本的标记。
score(X,y):返回在(X,y)上预测的准确率。
predict_proba(X):返回样本为每种标记的概率。
kneighbors([X,n_neighbors,return_distance]):返回样本点的k近邻点。如果return_diatance=True,同时还返回到这些近邻点的距离。
kneighbors_graph([X,n_neighbors,model]):返回样本点的连接图。

导入模块:from sklearn.neighbors import KNeighborsClassifier

案例:一个简单的KNN实例

# 导入模块
from sklearn.neighbors import KNeighborsClassifier
# 1.构造函数
x=[[1],[2],[3],[4]]
y=[0,0,1,1]
# 2.训练模型
# 2.1实例化一个估计器对象
estimator = KNeighborsClassifier(n_neighbors=3)

# 2.2调用fit方法,进行训练
estimator.fit(x,y)

# 3.数据预测
ret = estimator.predict([[2.51]])
print(ret)
# 可以这样理解,x是特征值,是dataframe形式理解为二维的[[]];
# y表示的目标值,可以表示为series,表示为一维数组[]
ret1 = estimator.predict([[2.52]])
print(ret1)
ret2 = estimator.predict([[1.50]])
print(ret2)

结果:

案例:鸢尾花种类预测

Iris数据集是常用的分类实验数据集,由Fisher, 1936收集整理。Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集。关于数据集的具体介绍:

可视化显示鸢尾花种类分布:

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.datasets import load_iris,fetch_20newsgroups
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier

# 显示中文
from pylab import mpl
# 设置显示中文字体
mpl.rcParams["font.sans-serif"] = ["SimHei"]
# 设置正常显示符号
mpl.rcParams["axes.unicode_minus"] = False 

def iris_plot(data,col1,col2):
    # lmplot是用来绘制回归图的
    sns.lmplot(x=col1,y=col2,data=data,hue="target",fit_reg=False)
    plt.title("鸢尾花数据显示")
    plt.show

# 1.1小数据集获取
iris = load_iris()
# 3.数据可视化
iris_d = pd.DataFrame(data=iris.data,columns=['Sepal_Lenght','Sepal_Width','Petal_Length','Petal_Width'])
iris_d["target"] = iris.target
iris_plot(iris_d,'Sepal_Width','Petal_Length')

 图像显示:

数据预处理 

在现实生活问题中,我们得到的原始数据往往非常混乱、不全面,机器学习模型往往无法从中有效识别并提取信息。数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已,在采集完数据后,机器学习建模的首要步骤以及主要步骤便是数据预处理。

在此文仅展示归一化与标准化操作:

归一化:

"""
归一化演示
:return:None
"""
from sklearn.preprocessing import MinMaxScaler
data = pd.read_csv("数据文件路径")
print(data)

# 1.实例化
transfer = MinMaxScaler(feature_range=(3,5))


# 2.进行转换,调用fit_transform
ret_data = transfer.fit_transform(data[["x","y","time"]])
print("归一化之后的数据为:\n",ret_data)

标准化:

"""
标准化演示
:return:None
"""
from sklearn.preprocessing import StandardScaler
data = pd.read_csv("数据文件路径")
print(data)
    
# 1.实例化
transfer = StandardScaler()
    
# 2.进行转化,调用fit_transform
ret_data = transfer.fit_transform(data[["x","y","time"]])
print("标准化之后的数据为:\n",ret_data)
print("每一列的方差为:\n",transfer.var_)
print("每一列的平均值为:\n",transfer.mean_)

种类预测:

import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier


data = load_iris
  
# x_train,x_test,y_train,y_test为训练集特征值,测试集特征值,训练集目标值,测试集目标值
x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target,test_size=0.2,random_state=22)

# 3.特征工程:标准化
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)

# 4.机器学习
estimator = KNeighborsClassifier(n_neighbors=9,algorithm='kd_tree')
estimator.fit(x_train,y_train)

# 5.模型评估
#  方法一:比对真实值和预测值
y_predict = estimator.predict(x_test)
print("预测结果为:\n",y_predict)
print("比对真实值和预测值:\n",y_predict==y_test)

评估结果:

 获取准确率:

# 方法二
score = estimator.score(x_test,y_test)
print("准确率为:\n",score)

 模型的保存与加载

import joblib

#保存
joblib.dump(estimator,"路径+文件名")

#加载
estimator = joblib.load("路径+文件名")

K值调优:

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split,GridSearchCV
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier

# 实例化一个估计器
estimator = KNeighborsClassifier(n_neighbors=5)
# 模型调优——交叉验证,网格搜索
param_grid = {"n_neighbors": [1,3,5,7]}
estimator = GridSearchCV(estimator,param_grid=param_grid,cv=5)
# 模型训练
estimator.fit(x_train,y_train)
#模型评估
#预测值结果输出
y_pre = estimator.predict(x_test)
print("预测值是:\n",y_pre)
#准确率计算
score = estimator.score(x_test,y_test)
print("准确率为:\n",score)
#查看交叉验证,网格搜索的一些属性
print("在交叉验证中验证的最好结果:\n",estimator.best_score_)
print("最好的参数模型:\n",estimator.best_estimator_)
print("交叉验证后的准确率结果:\n",estimator.cv_results_)

结果:

至此鸢尾花的种类预测功能已基本完成!

如有任何错误或疑问,欢迎评论区留言 

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

KNN算法实例——鸢尾花种类预测 的相关文章

  • 通过 Scrapy 抓取 Google Analytics

    我一直在尝试使用 Scrapy 从 Google Analytics 获取一些数据 尽管我是一个完全的 Python 新手 但我已经取得了一些进展 我现在可以通过 Scrapy 登录 Google Analytics 但我需要发出 AJAX
  • 将数据从 python pandas 数据框导出或写入 MS Access 表

    我正在尝试将数据从 python pandas 数据框导出到现有的 MS Access 表 我想用已更新的数据替换 MS Access 表 在 python 中 我尝试使用 pandas to sql 但收到错误消息 我觉得很奇怪 使用 p
  • 为 Anaconda Python 安装 psycopg2

    我有 Anaconda Python 3 4 但是每当我运行旧代码时 我都会通过输入 source activate python2 切换到 Anaconda Python 2 7 我的问题是我为 Anaconda Python 3 4 安
  • 如何在 Python 中检索 for 循环中的剩余项目?

    我有一个简单的 for 循环迭代项目列表 在某些时候 我知道它会破裂 我该如何退回剩余的物品 for i in a b c d e f g try some func i except return remaining items if s
  • PyUSB 1.0:NotImplementedError:此平台不支持或未实现操作

    我刚刚开始使用 pyusb 基本上我正在玩示例代码here https github com walac pyusb blob master docs tutorial rst 我使用的是 Windows 7 64 位 并从以下地址下载 z
  • 是否可以忽略一行的pyright检查?

    我需要忽略一行的pyright 检查 有什么特别的评论吗 def create slog group SLogGroup data Optional dict None SLog insert one SLog group group da
  • 如何加速Python中的N维区间树?

    考虑以下问题 给定一组n间隔和一组m浮点数 对于每个浮点数 确定包含该浮点数的区间子集 这个问题已经通过构建一个解决区间树 https en wikipedia org wiki Interval tree 或称为范围树或线段树 已经针对一
  • 如何使用 OpencV 从 Firebase 读取图像?

    有没有使用 OpenCV 从 Firebase 读取图像的想法 或者我必须先下载图片 然后从本地文件夹执行 cv imread 功能 有什么办法我可以使用cv imread link of picture from firebase 您可以
  • AWS EMR Spark Python 日志记录

    我正在 AWS EMR 上运行一个非常简单的 Spark 作业 但似乎无法从我的脚本中获取任何日志输出 我尝试过打印到 stderr from pyspark import SparkContext import sys if name m
  • 绘制方程

    我正在尝试创建一个函数 它将绘制我告诉它的任何公式 import numpy as np import matplotlib pyplot as plt def graph formula x range x np array x rang
  • Flask如何获取请求的HTTP_ORIGIN

    我想用我自己设置的 Access Control Allow Origin 标头做出响应 而弄清楚请求中的 HTTP ORIGIN 参数在哪里似乎很混乱 我在用着烧瓶 0 10 1 以及HTTP ORIGIN似乎是这个的特点之一object
  • 在Python中获取文件描述符的位置

    比如说 我有一个原始数字文件描述符 我需要根据它获取文件中的当前位置 import os psutil some code that works with file lp lib open path to file p psutil Pro
  • 如何使用Python创建历史时间线

    So I ve seen a few answers on here that helped a bit but my dataset is larger than the ones that have been answered prev
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe
  • 无法在 Python 3 中导入 cProfile

    我试图将 cProfile 模块导入 Python 3 3 0 但出现以下错误 Traceback most recent call last File
  • Pandas:merge_asof() 对多行求和/不重复

    我正在处理两个数据集 每个数据集具有不同的关联日期 我想合并它们 但因为日期不完全匹配 我相信merge asof 是最好的方法 然而 有两件事发生merge asof 不理想的 数字重复 数字丢失 以下代码是一个示例 df a pd Da
  • Jupyter Notebook 内核一直很忙

    我已经安装了 anaconda 并且 python 在 Spyder IPython 等中工作正常 但是我无法运行 python 笔记本 内核被创建 它也连接 但它始终显示黑圈忙碌符号 防火墙或防病毒软件没有问题 我尝试过禁用两者 我也无法
  • Fabric env.roledefs 未按预期运行

    On the 面料网站 http docs fabfile org en 1 10 usage execution html 给出这个例子 from fabric api import env env roledefs web hosts
  • 对年龄列进行分组/分类

    我有一个数据框说df有一个柱子 Ages gt gt gt df Age 0 22 1 38 2 26 3 35 4 35 5 1 6 54 我想对这个年龄段进行分组并创建一个像这样的新专栏 If age gt 0 age lt 2 the
  • 使用其构造函数初始化 OrderedDict 以便保留初始数据的顺序的正确方法?

    初始化有序字典 OD 以使其保留初始数据的顺序的正确方法是什么 from collections import OrderedDict Obviously wrong because regular dict loses order d O

随机推荐

  • Nmap网络扫描

    目录 预备知识 TCP与UDP 扫描的分类 nmap简介 实验目的 实验环境 实验步骤一 任务描述 安装Nmap 实验步骤二 任务描述 Zenmap基本应用 实验步骤三 任务三 nmap命令行的使用 预备知识 TCP与UDP TCP是一种面
  • SpringBoot+MyBits 调用mybatis-config.xml的方法

    SpringBoot MyBits 调用mybatis config xml的方法 在application properties中如做下调用 Mybatis mybatis config location classpath mybati
  • 已解决:Java环境变量配置后不生效

    一 问题 从jdk8升级到jdk11 配置JAVA HOME后 不生效 备注 jdk8是安装版 jdk11是解压版 二 解决办法 在环境变量Path中 删除下面的配置 C Program Files x86 Common Files Ora
  • Python 的reload()方法

    reload 函数将以前导入过的模块再加载一次 重新加载 reload 包括最初导入模块时应用的分析过程和初始化过程 这样就允许在不退出解释器的情况下重新加载已更改的Python模块 若干注意事项 1 如果模块在语法上是正确的 但在初始化过
  • 攻防世界_Crypto_sherlock

    攻防世界刷题记录Crypto篇 文章目录 攻防世界刷题记录Crypto篇 前言 解题步骤 1 筛选出文中的大写字母 2 借助Python处理字符串 总结 前言 继续高手进阶区题目 sherlock 咦 夏洛克 下载题目附件得到的是一个内容很
  • Docker root用户的pip使用方法

    Docker下root用户 pip install XX 显示pip命令不存在 原始目标 pip install XX pip install root user action ignore XX 要安装的包 参考 WARNING Runn
  • JavaScript中的正则表达式

    ECMAScript 通过RegExp类型来支持正则表达式 测试的方法 pattern test str 或 pattern exec str 其中str 是待匹配的字符串 pattern 是正则表达式 JavaScript 中的正则表达式
  • 找不到msvcp140.dll无法继续执行代码怎么解决?分享三个解决方法

    当你在运行某个程序或游戏时遇到msvcp140 dll缺失的错误提示 你可能会感到困惑和烦恼 在修复msvcp140 dll的过程中 我遇到了一些挑战 但最终成功解决了这个问题 以下是我总结的三个解决方法 希望能帮助你解决这个问题 找不到m
  • sklearn中的归一化方法StandardScaler中的fit、transform和fit_transform

    StandardScaler类 常用的数据归一化方式 减去平均值 然后通过标准差映射到均至为0的空间内 系统会记录每个输入参数的平均数和标准差 以便数据可以还原 sklearn preprocessing StandardScaler能够轻
  • 【极速版】vite安装配置ceisum教程

    Hello大家好 今天带来的是vite版本的cesium的安装教程 借助一个国人大佬写的插件vite plugin cesium 安装非常简单快捷 一起来看看吧 1 安装vite插件 官网 https github com nshen vi
  • opencv遍历彩色图像、灰度图像像素值的方法

    https www bbsmax com A RnJWZb2ozq
  • 嵌套滑动学习

    我们知道两个同一方向的可以滑动的View 如果不做任何处理 会出现滑动冲突 处理滑动冲突我们有内部和外部拦截法 如果有朋友还不知道事件分发的原理可以看包括滑动冲突的拦截事件分发源码的学习分享 处理滑动冲突之后还是存在缺陷 比如一次滑动操作父
  • JavaScript面试题

    1 数据类型有哪几种 检测方法是什么 基本数据类型 ES5 Number Boolean String Undefined Null ES6新增 symbol 引用数据类型 Object 检测方法4种 1 Object prototype
  • 无向图和有向图

    1 无向图 两点之间的边没有方向 点 Vertex 简称V 边 Edge 简称E 2 有向图 两点之间的边是有方向的 有多少边以某点为出发点 则有多少的出度 同理有多少边以某点为终点则有多少入度 度 出度 入度 3 邻接矩阵 用G V E
  • 几种常用回归算法的比较

    type introduce example k nearest neighbors 原理 是一种常用的监督学习方法 给定测试样本 基于某种距离度量找出训练集中与其最靠近的k个训练样本 然后基于这k个 邻居 的信息来进行预测 判定方法 1
  • 98个创新JAVA计算机毕业设计项目,通俗易懂,被朋友羡慕了

    面对如海的计算机毕业设计题目 你是否感到困惑 不知如何选择一个具有创新性的项目 今天 我们将为大四的同学们分享一些毕业设计项目 希望能对你的毕业设计有所帮助 一 成品列表 以下所有springboot框架项目的源码博主已经打包好上传到百du
  • Visual Studio对代码进行注释

    1 Ctrl K C 可以同时按住三键 也已分开来按Ctrl K Ctrl C 对选中的代码段进行注释 Ctrl K U 可以同时按住三键 也已分开来按Ctrl K Ctrl U 对选中的代码段取消注释 2 Ctrl Shift 切换块注释
  • Nacos 入门应用

    Nacos入门应用 一 概述 Nacos提供了统一配置管理 服务发现与注册 其中服务注册和发现的功能 相当于dubbo里面使用到的zookeeper 或者spring cloud里面应用到的eureka 之前在Spring Cloud Eu
  • lucene 目录结构简单介绍

    今天回顾了一下lucene 搜索引擎的基础技术 有必要总结一下 搜索引擎的相关知识点 lucene 目录结构 如下图所示 lucene 目录结构详细说明 core Lucene核心类库 analyzers common 不同语言和领域通用的
  • KNN算法实例——鸢尾花种类预测

    线性回归的scikit learn实现 scikit learn中提供了一个KNeighborClassifier类来实现k近邻法分类模型 方法 fit X y 训练模型 predict 使用模型来预测 返回待预测样本的标记 score X