机器学习之KNN算法预测数据和数据可视化

机器学习及KNN算法

目录

  • 机器学习及KNN算法
    • 机器学习基本概念
      • 概念理解
      • 步骤
      • 为什么要学习机器学习
      • 需要准备的库
    • KNN算法
      • 概念
      • 算法导入
      • 常用距离公式
      • 算法优缺点
        • 优点:
        • 缺点︰
    • 数据可视化
      • 二维界面
      • 三维界面
    • KNeighborsClassifier 和KNeighborsRegressor理解
      • 查看KNeighborsRegressor函数参数定义
      • 查看 KNeighborsClassifier函数参数定义
      • 参数理解
      • 使用格式
    • 预测类别实际应用
      • 问题
      • 特征数据
      • 类别标签
      • 问题理解
      • 可视化数据理解
      • 数据预测
    • 预测数值实际应用

机器学习基本概念


概念理解

利用数学中的公式 总结出数据中的规律。

步骤

  1. 数据收集
    数据量越大,最终训练的结果越正确
  2. 建立数学模型训练
    针对不同的数据类型需要选择不同的数学模型
  3. 预测
    预测数据

为什么要学习机器学习

  • 信息爆炸时代,数据量太大,人工已经无法处理。
  • 重复性的工作交给电脑来做。
  • 潜在一些信息之间的关联人类不容易直接发现。
  • 机器学习确实有效的解决很多问题。
    等…

需要准备的库

  • numpy
  • scipy
  • matplotlib
  • pandas
  • sklearn
    Sklearn (Scikit-Learn) 是基于 Python 语言的第三方机器学习库。它建立在 NumPy, SciPy, Pandas 和 Matplotlib库 之上,里面的 API 的设计非常好,所有对象的接口简单,很适合新手上路。我使用的是1.0.2版本,可在终端下载
    代码展示:

未修改pip下载源的,后面需添加 -i 镜像源地址

pip install scikit_learn==1.0.2

KNN算法


概念

全称是k-nearest neighbors,通过寻找k个距离最近的数据,来确定当前数据值的大小或类别。是机器学习中最为简单和经典的一个算法。
如果求得是值,则求其平均值为结果,如果是确定类别,则比较多的类别为结果。

算法导入

  • KNeighborsClassifier 预测类别
  • KNeighborsRegressor 预测值
from sklearn.neighbors import KNeighborsClassifier
from sklearn.neighbors import KNeighborsRegressor

常用距离公式

  • 欧式距离:

    • 二维空间:a点为(x1,y1),b点为(x2,y2)在这里插入图片描述
    • 三维空间:a点为(x1,y1 ,z1),b点为(x2,y2 ,z2)
      -
    • n维空间:a点为(x11,x12 ,…,x1n),b点为(x21,x22,…,x2n)
      在这里插入图片描述
  • 曼哈顿距离:

    • 二维空间:a点为(x1,y1),b点为(x2,y2)
      在这里插入图片描述

    • n维空间:a点为(x11,x12 ,…,x1n),b点为(x21,x22,…,x2n)
      在这里插入图片描述

算法优缺点

优点:

1.简单,易于理解,易于实现,无需训练;
2.适合对稀有事件进行分类;
3.对异常值不敏感。

缺点︰

1.样本容量比较大时,计算时间很长;
⒉.不均衡样本效果较差;

数据可视化


二维界面

格式:

  • figure(“窗口名”)
    创建空白画板
  • axes()
    确认维度,默认二维
  • scatter(x,y,c=“十六进制颜色值”,marker=“标识图案”)
    设置为散点图,同时确认数据及数据显示颜色和标识图案,x,y可以是数值也可以是数组
  • set(xlabel=“x”,ylabel=“y”)
    设置坐标轴名称,x,y可以改为需要的坐标轴名
    代码展示:
import matplotlib.pyplot as plt
a = [1,2,3,4]
# 建立空白画板
fig = plt.figure("二维")
#确认维度,默认二维
b = plt.axes()
# 数据可以是数值也可以是数组
b.scatter(2,3,c="#00F5FF",marker="o")
b.scatter(a,a,c="#00FF7F",marker="*")
b.set(xlabel="x",ylabel="y")
plt.show()

运行结果:
在这里插入图片描述

三维界面

格式:

  • figure(“窗口名”)
    创建空白画板
    • axes(projection=“3d”)
      设置三维
    • scatter(x,y,z,c=“十六进制颜色值”,marker=“标识图案”)
      确认数据及数据显示颜色和标识图案,x,y,z可以是数值也可以是数组
  • set(xlabel=“x”,ylabel=“y”,zlabel=“z”)
    设置坐标轴名称,x,y,z可以改为需要的坐标轴名

代码展示:

a = [1,2,3,4]
data = np.loadtxt('dating_TS.txt')
figure = plt.figure("三维")
b = plt.axes(projection="3d")
b.scatter(2,3,4,c="#00F5FF",marker="o")
b.scatter(a,a,a,c="#00FF7F",marker="*")
b.set(xlabel="x",ylabel="y",zlabel="z")
plt.show()

运行结果:
在这里插入图片描述

KNeighborsClassifier 和KNeighborsRegressor理解


查看KNeighborsRegressor函数参数定义

按住CTRL,鼠标点击函数可自动跳转
部分代码展示:

    def __init__(self,n_neighbors=5,*,weights="uniform",algorithm="auto",leaf_size=30,p=2,metric="minkowski",metric_params=None,n_jobs=None,)

查看 KNeighborsClassifier函数参数定义

部分代码展示:

def __init__(self,n_neighbors=5,*,weights="uniform",algorithm="auto",leaf_size=30,p=2,metric="minkowski",metric_params=None,n_jobs=None,)

参数理解

  • n_neighbors
    k值,邻居的个数,默认为5
    。【关键参数】
  • weights : 权重项,默认uniform方法。
    • Uniform:所有最近邻样本的权重都一样。【一般使用这一个】
    • Distance:权重和距离呈反比,距离越近的样本具有更高的权重。【确认样本分布情况,混乱使用这种形式】
    • Callable:用户自定义权重。
  • algorithm :用于计算最近邻的算法。
    • ball_tree:球树实现
    • kd_tree:KD树实现, 是一种对n维空间中的实例点进行存储以便对其进行快速搜索的二叉树结构。
    • brute:暴力实现
    • auto:自动选择,权衡上述三种算法。【一般按自动即可】
      leaf_size :空值KD树或者球树的参数,停止建子树的叶子节点的阈值。
  • p : 距离的计算方式。P=1为曼哈顿距离,p=2为欧式距离
    1.曼哈顿距离2.欧式距离3.切比雪夫距离4.闵可夫斯基距离5.带权重闵可夫斯基距离
    6.标准化欧式距离7.马氏距离
  • metric : 用于树的距离度量
    “euclidean” EuclideanDistance - sqrt(sum((x - y)^2))
    “manhattan” ManhattanDistance - sum(|x - y|)
    “chebyshev” ChebyshevDistance - max(|x - y|)
    “minkowski” MinkowskiDistance p, w sum(w * |x - y|^p)^(1/p)
    “wminkowski” WMinkowskiDistance p, w sum(|w * (x - y)|^p)^(1/p)
    “seuclidean” SEuclideanDistance V sqrt(sum((x - y)^2 / V))
    “mahalanobis” MahalanobisDistance V or VI ``sqrt((x - y)’ V^-1 (x - y))
  • metric_params :用于比较复杂的距离的度量附加参数。【用不上】

使用格式

  • x = data1 特征数据
  • y = data2 结果(平均值/较多类别)
  • n = KNeighborsClassifier(n_neighbors=7,p=1,metric=“euclidean”)
    确定最近个数为7,和距离计算方式1曼哈顿距离,树的距离方式是欧式距离
  • n.fit(x,y)
    自带的训练模型,自动按上方设置计算判断
  • n.predict(二维数组)
    预测二维数组的结果

预测类别实际应用


问题

现在有很多大学里出现室友矛盾,假如室友可以选择: 大学里面 ,对于校方,把类型相同的学生放在一个寝室,在基于大二大三大四的,现已存在一个数据文件datingTestSet2.txt ,为历年大学生的调查问卷表。

特征数据

第1列:每年旅行的路程
第2列:玩游戏所有时间百分比
第3列:每个礼拜消 零食

类别标签

1表示爱学习,2表示一般般,3表示爱玩,目的为学生在大学中挑选室友的信息

datingTestSet2.txt 部分数据展示:
在这里插入图片描述

问题理解

根据最近距离的k个距离最近的类别标签来预测要确定如有[1500,0.924729,0.2134935]特征数据的学生的类别标签,进而分寝室。
注意点:最近距离是由三列特征数据来计算,结果是类别,需要使用的是KNeighborsClassifier

可视化数据理解

data[:,-1] 索引数据最后一列
data[:,-1] ==1 判断为类别1为T,否则为F,结果是bool值
data[data[:,-1]==1] 根据判断归类各个类别数据
data_1[:,0],data_1[:,1],data_1[:,2] 分别为第1,2,3列特征数据
由颜色表示类别3种

调试查看数据data
在这里插入图片描述
data[:,-1]
在这里插入图片描述
data[:,-1] ==1
在这里插入图片描述
data[data[:,-1]==1]
在这里插入图片描述

代码展示:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.neighbors import KNeighborsRegressor
data = np.loadtxt('dating_TS.txt')
data_1 = data[data[:,-1]==1]
data_2 = data[data[:,-1]==2]
data_3 = data[data[:,-1]==3]
a_d = data[:,-1]
a_d_1 = [data[:,-1]==1]
fig = plt.figure()
a = plt.axes(projection="3d")
a.scatter(data_1[:,0],data_1[:,1],data_1[:,2],c="#00F5FF",marker="o")
a.scatter(data_2[:,0],data_2[:,1],data_2[:,2],c="#00FF7F",marker="o")
a.scatter(data_3[:,0],data_3[:,1],data_3[:,2],c="#000080",marker="o")
a.set(xlabel="x",ylabel="y",zlabel="z")
plt.show()

运行结果:
在这里插入图片描述

数据预测

代码展示:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.neighbors import KNeighborsClassifier
from sklearn.neighbors import KNeighborsRegressor
data = np.loadtxt('dating_TS.txt')
x = data[: , :-1]
y = data[: , -1]
n = KNeighborsClassifier(n_neighbors=7,p=1)
n.fit(x,y)
print(n.predict([[1500,0.924729,0.2134935]]))
p_data = [[1234,2.4567,0.5467],[123435,8.2134,2.345],[5668,3.6754,0.34567]
]
print(n.predict(p_data))
n1 = KNeighborsClassifier(n_neighbors=3,p=2,metric="euclidean")
n1.fit(x,y)
print(n1.predict([[1500,0.924729,0.2134935]]))
p_data = [[1234,2.4567,0.5467],[123435,8.2134,2.345],[5668,3.6754,0.34567]
]
print(n1.predict(p_data))

运行结果:
在这里插入图片描述

预测数值实际应用

给定房屋特征和价格数据,最后一列为价格,来根据历史数据预测价格
部分房屋特征和价格数据展示:

在这里插入图片描述

代码展示:

import numpy as np
from sklearn.neighbors import KNeighborsRegressor
data_f = np.loadtxt('data_f1.txt')
x = data_f[:,:-1]
y = data_f[:,-1]
n = KNeighborsRegressor(n_neighbors=7,p=2,metric="euclidean")
n.fit(x,y)
print(n.predict([[ 2.82838,0.00,18.120,0,0.5320,5.7620,40.32,4.0983,24,666.0,20.21,392.93,10.42]]))
n1 = KNeighborsRegressor(n_neighbors=5,p=2,metric="euclidean")
n1.fit(x,y)
print(n1.predict([[ 2.82838,0.00,18.120,0,0.5320,5.7620,40.32,4.0983,24, 666.0,20.21,392.93,10.42]]))

运行结果:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java包装类型的缓存

Java 基本数据类型的包装类型的大部分都用到了缓存机制来提升性能。 Byte,Short,Integer,Long 这 4 种包装类默认创建了数值 [-128,127] 的相应类型的缓存数据,Character 创建了数值在 [0,127] 范围的缓存数据,Boolean 直接返回 True or Fal…

施耐德变频器ATV320系列技术优势:创新与安全并重

在工业自动化领域,追求高效、安全与智能已成为不可阻挡的趋势。施耐德变频器ATV320系列凭借其强大的设计标准和全球认证,成为能够帮助企业降低安装成本,提高设备性能的创新解决方案。 【全球认证,品质保障】ATV320 系列秉持施耐德…

Excel批量设置行高,Excel表格设置自动换行后打印显示不全,Excel表格设置最合适的行高后打印显示不全,完美解决方案!!!

文章目录 说个问题(很严重!!!)写个方案会Python看这里Python环境搭建不存在多行合并存在多行合并 不会Python看这里 说个问题(很严重!!!) 平时处理Excel表格…

洛谷 P1014:Cantor 表

【题目来源】https://www.luogu.com.cn/problem/P1014https://www.acwing.com/problem/content/5510/【题目描述】 现代数学的著名证明之一是 Georg Cantor 证明了有理数是可枚举的。 他是用下面这一张表来证明这一命题的: 1/1 1/2 1/3 1/4 1/5 … 2/1 2/2 …

C语言基础:指针(数组指针与指针数组)

数组指针与指针数组 数组指针 概念:数组指针是指向数组的指针,本质上还是指针 特点: 先有数组,后有指针 它指向的是一个完整的数组 一维数组指针: 语法: 数据类型 (*指针变量名)[行容量][列容量]; 案…

华为管理变革之道:奋斗文化与活力

目录 企业文化是什么? 为什么活下去是华为的文化? 活下来,是华为公司的最低纲领,也是华为公司的最高纲领! 资源终会枯竭,唯有文化才能生生不息 企业文化之一:以客户为中心 企业文化之二&a…

JS面试题|[2024-12-26]

1.事件委托是什么 又叫事件代理,原理就是直接利用了事件冒泡的机制来实现,也就是说把子元素的事件绑定到了父元素的身上,如果子元素阻止了事件冒泡,那么委托也就不成立了。 阻止事件冒泡:event.stopPropagation() addE…

upload-labs关卡记录12

直接上传一句话木马,发现提示: 很明显这是一个白名单,而且不是前端的js检查,而是服务端的检查,因此我们使用bp抓包,改一下文件类型试试: 找到包之后,我们对content-type进行一个更改…

ArkTs组件(2)

一.下拉列表组件&#xff1a;Select 1.接口 Select(options: Array<SelectOption>) 参数名类型必填说明optionsArray<SelectOption>是设置下拉选项。 SelectOption对象说明 名称类型必填说明valueResourceStr是 下拉选项内容。 iconResourceStr否 下拉选项图片…

J9学习打卡笔记

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 IInception v3算法实战 网络结构InceptionAInceptionBInceptionCReductionAReductionB辅助分支个人总结 import os, PIL, random, pathlib import torch impor…

软考和 PMP 哪个含金量更高点?

软考高项比较适用于计算机 IT 行业&#xff0c;而 PMP 不受行业限制&#xff0c;各行各业都适用&#xff0c;没有哪个含金量更高的说法 至于哪个更合适&#xff0c;看你想去国企还是民企&#xff0c;国企软考吃香&#xff0c;外企PMP 吃香 下面说下两者具体有什么区别&#x…

面向微服务的Spring Cloud Gateway的集成解决方案:用户登录认证与访问控制

&#x1f3af;导读&#xff1a;本文档详细描述了一个基于Spring Cloud Gateway的微服务网关及Admin服务的实现。网关通过定义路由规则&#xff0c;利用负载均衡将请求转发至不同的后端服务&#xff0c;并集成了Token验证过滤器以确保API的安全访问&#xff0c;同时支持白名单路…

NLP 中文拼写检测纠正论文 C-LLM Learn to CSC Errors Character by Character

拼写纠正系列 NLP 中文拼写检测实现思路 NLP 中文拼写检测纠正算法整理 NLP 英文拼写算法&#xff0c;如果提升 100W 倍的性能&#xff1f; NLP 中文拼写检测纠正 Paper java 实现中英文拼写检查和错误纠正&#xff1f;可我只会写 CRUD 啊&#xff01; 一个提升英文单词拼…

kong网关使用pre-function插件,改写接口的返回数据

一、背景 kong作为api网关&#xff0c;除了反向代理后端服务外&#xff0c;还可对接口进行预处理。 比如本文提及的一个小功能&#xff0c;根据http header某个字段的值&#xff0c;等于多少的时候&#xff0c;返回一个固定的报文。 使用到的kong插件是pre-function。 除了上…

Linux:进程概念

1.冯诺依曼体系结构 结论&#xff1a; --- CPU不和外设直接打交道&#xff0c;和内存直接打交道。 --- 所有的外设&#xff0c;有数据需要收入&#xff0c;只能载入到内存中&#xff1b;内存写出&#xff0c;也一定是写道外设中。 --- 为什么程序要运行必须加载到内存&#xf…

结构体(初阶)

结构体&#xff1a; 结构体类型的声明 结构体初始化 结构成员访问 结构体传参 1.结构体的声明 1.1结构的基础知识 结构是一些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量。 1.2结构的声明 struct tag { member - list; }variable-lis…

设计模式的主要分类是什么?请简要介绍每个分类的特点。

大家好&#xff0c;我是锋哥。今天分享关于【设计模式的主要分类是什么&#xff1f;请简要介绍每个分类的特点。】面试题。希望对大家有帮助&#xff1b; 设计模式的主要分类是什么&#xff1f;请简要介绍每个分类的特点。 1000道 互联网大厂Java工程师 精选面试题-Java资源分…

显示 Windows 任务栏

显示 Windows 任务栏 1. 取消勾选自动隐藏任务栏2. 重启 Windows 资源管理器References 1. 取消勾选自动隐藏任务栏 Windows 任务栏具有自动隐藏功能&#xff0c;不使用时自动隐藏&#xff0c;使用时显示。 鼠标右键单击桌面上的空白区域&#xff0c;个性化 -> 任务栏。不…

c# RSA加解密工具,.netRSA加解密工具

软件介绍 名称: c# RSA加解密工具,.netRSA加解密工具依赖.net版本: .net 8.0工具类型: WinForm源码下载 c# RSA加解密工具,.netRSA加解密工具 依赖项 WinFormsRSA.csproj <Project

STM32-笔记17-PWM波型

一、介绍 PWM波形&#xff08;Pulse Width Modulation&#xff0c;脉冲宽度调制波形&#xff09;是一种占空比可变的脉冲波形。这种调制方式通过改变脉冲的宽度来控制电路中的信号强度和频率。具体来说&#xff0c;PWM波形中的高电平持续时间和低电平持续时间可以根据需要进行调…