当前位置: 首页 > news >正文

网站开发学习网云县网站建设

网站开发学习网,云县网站建设,百度指数资讯指数是指什么,如何优化好一个网站一、knn算法介绍1.什么是 KNN 算法?KNN(K-Nearest Neighbors,K 最近邻)是机器学习中最直观、最容易理解的算法之一。它的核心思想源自我们日常生活中的常识:相似的事物总会聚集在一起。想象一下,如果你走进…

一、knn算法介绍

1.什么是 KNN 算法?

KNN(K-Nearest Neighbors,K 最近邻)是机器学习中最直观、最容易理解的算法之一。它的核心思想源自我们日常生活中的常识:相似的事物总会聚集在一起

想象一下,如果你走进一个陌生的聚会,看到一群人分成几个小圈子交谈,你想知道自己应该加入哪个圈子,最自然的做法就是看看周围和你最像的几个人(最近邻)在哪个圈子,然后做出选择。这正是 KNN 算法的工作方式。

KNN 属于 "懒惰学习"(Lazy Learning)算法,这意味着它不需要像决策树或神经网络那样进行繁琐的模型训练过程,而是在需要预测时才进行计算。这种特性也让它被称为 "基于实例的学习"。

2.knn算法的工作原理

KNN 算法的工作流程可以概括为三个简单步骤:

计算距离:对于需要预测的新样本,计算它与训练集中所有样本的距离

寻找邻居:找出距离最近的 K 个样本(这就是 "K 近邻" 中的 K)

投票决定:根据这 K 个邻居的类别进行投票,得票最多的类别就是新样本的预测类别

3.距离度量方式

KNN 算法中最常用的距离度量方式有:

欧氏距离:最常用的距离度量,即两点之间的直线距离

曼哈顿距离:各维度差的绝对值之和,适用于高维数据

闵可夫斯基距离:欧氏距离和曼哈顿距离的一般形式

4.k值如何选择

K 值是 KNN 算法中唯一的关键参数,它的选择直接影响模型性能:

K 值过小:模型容易过拟合,对噪声敏感,决策边界复杂

K 值过大:模型过于简单,可能忽略数据的局部模式,决策边界趋于平滑

K 为奇数:可以避免投票时出现平局的情况

通常我们会通过交叉验证来选择最优的 K 值,绘制 K 值与模型准确率的关系图,找到性能最佳的 K 值点。

一、环境配置

1.sklearn库

scikit-learn(简称 sklearn)是 Python 中最流行的机器学习库之一,它提供了简单高效的数据挖掘和数据分析工具,适用于各种监督和无监督学习算法。

主要特点:

  1. 丰富的算法:包含分类、回归、聚类、降维、模型选择和预处理等多种算法
  2. 易用性:统一的 API 接口,所有算法都遵循 fit ()、predict () 等一致的方法
  3. 与其他库集成:与 NumPy、Pandas 和 Matplotlib 等数据科学库无缝协作
  4. 文档完善:提供详细的文档和丰富的示例
2.knn中sklearn的使用模块

在 scikit-learn(sklearn)中,K 近邻(KNN)算法主要通过 sklearn.neighbors 模块实现,支持分类(KNeighborsClassifier)和回归(KNeighborsRegressor)两种任务。 

 KNeighborsClassifier 的重要参数:

  1. n_neighbors:K 值(最关键参数),决定考虑多少个近邻的投票
  2. weights
    • 'uniform'(默认):所有近邻权重相同
    • 'distance':权重与距离成反比(距离越近影响越大)
  3. metric:距离度量方式
    • 'euclidean'(默认):欧氏距离
    • 'manhattan':曼哈顿距离
    • 'minkowski':闵可夫斯基距离(可通过 p 参数调整,p = 1为曼哈顿距离,p=2为欧式距离)
  4. algorithm:计算近邻的算法
    • 'auto'(默认):自动选择最优算法
    • 'ball_tree''kd_tree''brute'(暴力搜索)

 二、代码实现knn算法:

 1.读取并提取所需文件数据

读取数据:

使用numpy库读取数据

 data = np.load文件类型("文件名")

 示例代码:

读取名为datingTestSet2的txt文件

import numpy as npdata = np.loadtxt('datingTestSet2.txt')

 提取所需文件:

任务目标:

利用matolotkib库实现学生分配。将相同类型的学生在一个三维坐标轴上用同一种形式表达出来。爱学习的一类,爱玩游戏一类,爱旅游一类

示例代码: 

import numpy as np
import matplotlib.pyplot as pltdata = np.loadtxt("datingTestSet2.txt")
data_1 = data[data[:,-1]==1]
data_2 = data[data[:,-1]==2]
data_3 = data[data[:,-1]==3]
fig = plt.figure()
ax = plt.axes(projection="3d")
ax.scatter(data_1[:,0],data_1[:,1],zs=data_1[:,2],c="red",marker="o")
ax.scatter(data_2[:,0],data_2[:,1],zs=data_2[:,2],c="blue",marker="^")
ax.scatter(data_3[:,0],data_3[:,1],zs=data_3[:,2],c="black",marker="+")
ax.set(xlabel='x',ylabel='y',zlabel='z')
plt.show()

运行结果: 

代码解析:

 data = np.loadtxt("datingTestSet2.txt") :读取txt文件

data_1 = data[data[:,-1]==1] :文件内已经做好分类,最后一列有1,2,3分别代表各自属于的类型,该行代码表示最后一列为1,即为第一类学生

ax = plt.axes(projection="3d"):  建立3d坐标系

ax.scatter(data_1[:,0],data_1[:,1],zs=data_1[:,2],c="red",marker="o"):scatter:表示为散点图,括号内表示分别为x,y,z赋值。

三、knn项目实战:

前情提要:

fit(x,y)训练:将x,y数据分布传入进去模型就训练好了

predict(数据集)预测:新的数据集输入进行预测

score(x,y):计算模型的准确率

示例代码: 

任务目标1:利用人工智能模型knn 实现宿舍寝室的分配。将相同类型的学生
分配在同一个寝室。爱学习的在一起,一般般在一起,爱玩在一起
1.历史数据 通过调查问卷的形式调查学生的特征,由辅导员来决定
第一列:旅游的路程 第二列:玩游戏所有时间百分比 第三列:每个礼拜消耗零食的重量
最后一列学生类别
2.knn算法实现模型
3.新的数据(大一新生,提前预判学生是1,2,3)

数据集内1000个数据,前800个进行训练,后200进行预测

示例代码:

import numpy as np
from sklearn.neighbors import KNeighborsClassifier
data = np.loadtxt('datingTestSet2.txt')
X = data[0:800,0:3]
y = data[0:800,-1]
neigh = KNeighborsClassifier(n_neighbors=5)
neigh.fit(X,y)
text_x = data[800:1000,0:3]
text_y = data[800:1000,-1]
a_predict = neigh.predict(text_x)
a_score = neigh.score(text_x,text_y)
print(a_score)
print(a_predict)

 任务目标2:鸢尾花判断

我们使用了 sklearn 内置的鸢尾花数据集,包含 2种鸢尾花的 4 个特征(花萼长度、花萼宽度、花瓣长度、花瓣宽度)进行训练

示例代码:


import pandas as pd
train = pd.read_excel("D:\pythonProject11\class\鸢尾花训练数据.xlsx")
text = pd.read_excel("D:\pythonProject11\class\鸢尾花测试数据.xlsx")
train_X = train[["萼片长(cm)","萼片宽(cm)","花瓣长(cm)","花瓣宽(cm)"]]
train_y = train[["类型_num"]]
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(train_X,train_y)
train_predict = knn.predict(train_X)
score = knn.score(train_X,train_y)
text_x = text[["萼片长(cm)","萼片宽(cm)","花瓣长(cm)","花瓣宽(cm)"]]
text_y = text[["类型_num"]]text_predicted = knn.predict(text_x)
score = knn.score(text_x,text_y)
print(score)

在鸢尾花数据集上,KNN 算法通常能取得非常高的准确率(通常在 95% 以上)。这是因为鸢尾花的三类样本在特征空间中具有较好的可分性。

http://www.dtcms.com/a/612562.html

相关文章:

  • 网页设计设计一个网站首页昆明网站制作策划
  • 网站开发计入什么会计科目做sgs认证的公司网站
  • 网站如何规划广西住房和城乡建设厅网站首页
  • 中山网站建设乐云seo模板中心百度旗下13个app
  • 网站建设需要哪些语言跨境电商平台推广
  • wordpress搜站点网络中断二维码生成器 制作
  • cod建站平台网站建设辶首先金手指十四
  • 公司网站定制青岛微信网站建设
  • 短视频公司网站建设方案带状疱疹的预防措施
  • 网站系统维护一般多长时间html5 图片展示网站
  • 专业上海网站建设公司哪家好做网站dw怎么用
  • 北京房地产网站建设功能多的网站模板 中文内容
  • 网站建设中模板自己做网站怎么能被访问
  • 手机主题如何自己制作网站黄冈论坛网
  • 一步一步网站建设教程网站后台怎样推荐图片
  • app软件下载站seo教程动画制作用什么软件好
  • 昆明网站建设搜王道下拉免费开发软件制作平台
  • 单页面网站建设加盟教育培训机构
  • 找个免费的网站wordpress 添加外观
  • 衡水专业制作网站成都住建局官网租房交易中心
  • wordpress 导航站模板下载搜索引擎优化的方式
  • 有免费的网站建设wordpress 清除cookies
  • 怎么看网站是不是php语言做的wordpress ipc主题
  • 个人博客手机网站模板合肥seo整站优化网站
  • 高端大气的网站模板杭州房产透明售房网
  • 网站自适应屏幕电子商务与网站建设策划书
  • 网站开辟两学一做专栏wordpress放在哪
  • 河北廊坊建设局网站网站建设的要点是什么意思
  • 程序可以做网站吗ps网站建设教程
  • 邢台移动网站建设广告设计海报