机器学习1一knn算法

news2024/9/24 7:20:39

1.基础知识点介绍

曼哈顿距离一般是比欧式距离长的除非在一维空间

拐弯的就是曼哈顿距离

Knn查看前5行数据head(),info看空非空

查看特征对应的类型

Head()默认前5行,head(3)就是前3行数据

Unique()可以查看分类后的结果

csv的数据应该是逗号分隔,但也不确定,要去查看数据不要只看拓展名要点进去看一下

这个删掉没有把原数据删掉

如果把原数据删掉加上inplace=true

#练习1 导入数据分析三剑客
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
#导入KNN算法
#sklearn机器学习库,KNeighborsClassifier :KNN分类器
from sklearn.neighbors import KNeighborsClassifier

### 1. k-近邻算法原理
#简单地说,K-近邻算法采用测量不同特征值之间的距离方法进行分类(K-Nearest Neighbor,KNN)
##### 工作原理 **欧几里得距离(Euclidean Distance)**欧氏距离是最常见的距离度量,衡量的是多维空间中各个点之间的绝对距离。
knn优缺点

#- 优点:精度高、对异常值不敏感。
#- 缺点:时间复杂度高、空间复杂度高。
#### 2. 在scikit-learn库中使用k-近邻算法
#- 分类问题:from sklearn.neighbors import KNeighborsClassifier

#- 回归问题:from sklearn.neighbors import KNeighborsRegressor
#导入电影数据
movie=pd.read_excel('../data/movies.xlsx',sheet_name=1)
movie
#中文不可以训练,电影名称从业务的角度也不能拿来训练
data=movie[['武大镜头','接吻镜头']].copy()
data #必须是二维数据
# target (label) 标签,标记,目标结果
target=movie.分类情况
target
data.shape,target.shape
# 使用KNN算法

# 1. 创建KNN对象
# n_neighbors=5 : K=5,会找最近的5个近邻
# p=2:默认值,表示使用欧式距离,p=1表示曼哈顿距离
knn=KNeighborsClassifier(n_neighbors=5,p=2)
knn
# 2. 训练 : 训练历史数据
#  数据: 
#     训练数据: 用来训练
#     测试数据:或验证数据,用来测试或验证模型的好坏

# X :必须是二维数据
# y :结果,一般是一维
knn.fit(X=data,y=target)
data
# 3. 预测新数据
# 提供测试数据
X_test=np.arry([[50, 1], [1, 20], [30, 1], [2, 10], [20, 10]])
X_test=pd.DataFrame(X_test,columns=data.columns)
y_test=np.array(['动作片', '爱情片', '动作片', '爱情片', '动作片'])
# 预测:predict
y_pred=knn.predict(X_test)
y_pred
# 4. 计算得分: 准确率
knn.score(X_test,y_test)
总结:# 数据
#     data, target : 一般表示全部数据

#  训练数据
#   X_train : 训练集中的数据
#   y_train :训练集中的数据对应的结果
#  
# 预测数据
#   X_test : 测试集中的数据
#   y_test : 测试集中的数据对应的真实结果
#   y_pred : 测试集中的数据对应的预测结果

#from sklearn.datasets:提供现成的数据集,主要用来学习和测试

#导入数据
import pandas as pd 
import numpy as np 
from sklearn.datasets import load_iris
from sklearn.neighbors import KNeighborsClassifier 
iris=load_iris()
iris
data=iris['data']
target=iris['target']
target_names=iris['target_names']
feature_names=iris['feature_names']
data.shape,target.shape
target
target_names
feature_names
pd.DataFrame(data,columns=feature_names)
#拆分数据集
from sklearn.model_selection import train_test_split

# test_size 有2种写法:
#   1. int整数,那么就表示使用这么多的数据作为测试数据
#   2. float小数,0-1之间,测试数据占所有数据的比重, 比如:0.2 = 150*20% = 20

# 训练数据: X_train, y_train
# 测试数据: X_test, y_test
x_train,x_test,y_train,y_test=train_test_split(data,target,test_size=0.2)
display(x_train.shape,x_test.shape)
#使用knn算法knn = KNeighborsClassifier()
#1.创建knn
knn=KNeighborsClassifier()
#2.训练
knn.fit(x_train,y_train)
#3.预测
y_pred=knn.predict(x_test)
y_pred
#得分
knn.score(x_test,y_test)
#4. 拆分数据集:训练数据和预测数据
#    - train_test_split
import numpy as np
import pandas as pd
#import matplotlib.pyplot as plt
from sklearn.neighbors import KNeighborsClassifier
x_train,x_test,y_train,y_test=train_test_split(data,target,test_size=0.2)
x_train.shape,x_test.shape
#使用knn算法
knn=KNeighborsClassifier()
knn.fit(x_train,y_train)
#预测
knn = KNeighborsClassifier()
knn.fit(x_train,y_train)
#预测
knn.predict(x_test)
#得分
knn.score(x_test,y_test)
#6. 保存训练模型  
#    - import joblib
#    - 保存模型: joblib.dump(knn, 'knn.plk')
#   - 导入模型: joblib.load('knn.plk')
import joblib
joblib.dump(knn,'knn.plk')
#导入模型
new_knn=joblib.load('knn.plk')
new_knn
#预测
new_knn.predict(x_test)

#### 3、癌症预测
#- 读取cancer.csv文件
#- 删除列: 'ID'
#- Diagnosis 是target
#- 使用train_test_split
#- 使用KNN训练,并预测
#- 交叉表查看结果pd.crosstab( )
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
cancer=pd.read_table('../data/cancer.csv')
cancer.shape
cancer.head()
cancer.drop(columns='ID',inplace=True)
cancer.head(3)
data=cancer.iloc[:,1:].copy()
target.unique()
x_train,x_test,y_train,y_test=train_test_split(data,target,test_size=0.2)
#knn
knn=KNeighborsClassifier()
knn.fit(x_train,y_train)
#预测
y_pred=knn.predict(x_test)
y_pred
#得分
knn.score(x_test,y_test)
pd.crosstab(
    index=y_pred, #预测结果
    columns=y_test,
    rownames=['预测'],
    colnames=['真实'],
    margins=True
)

 

 

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

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

相关文章

《学成在线》微服务实战项目实操笔记系列(P1~P83)【上】

史上最详细《学成在线》项目实操笔记系列【上】,跟视频的每一P对应,全系列12万字,涵盖详细步骤与问题的解决方案。如果你操作到某一步卡壳,参考这篇,相信会带给你极大启发。 一、前期准备 1.1 项目介绍 P2 To C面向…

Leecode之随机链表的复制

一.题目及剖析 https://leetcode.cn/problems/copy-list-with-random-pointer/ 这个题目的意思就是拷贝一份复杂链表,难点在于它的random指针所指向的空间与拷贝下来的链表之间缺少一种联系,当然可以用遍历链表的方式通过value去找那块空间,不过时间复杂度太高. 二.思路引入 …

hook函数——useState

useState useState是React中的一个Hook函数,用于在函数组件中添加状态。基本使用语法如下: const [state, setState] useState(initialState) state:表示当前状态的值setState:更新状态的函数initialState:初始状态…

Java基础(二十四):网络编程

Java基础系列文章 Java基础(一):语言概述 Java基础(二):原码、反码、补码及进制之间的运算 Java基础(三):数据类型与进制 Java基础(四):逻辑运算符和位运算符 Java基础(五):流程控制语句 Java基础(六)&#xff1…

[Python] 函数详讲

可莉将这篇博客收录在了:《Python》 可莉推荐的一位优质博主:Keven ’ bloghttp://t.csdnimg.cn/6iwnv 跟着可莉一起学习,一篇文章来带你理解Python中的函数的奥秘~ 一、语法格式 定义函数 def 函数名(形参列表):#函数体return 返回值 调用函…

猫头虎分析:如何利用ChatGPT及生成式AIGC提高工作效率 ‍

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

小区创业项目推荐:小投资大回报的店铺类型

作为一位拥有5年鲜奶吧创业经验的自媒体博主,我深知在小区内寻找一个既小投资又能带来大回报的创业项目是多么重要。今天,我要为大家推荐的,正是这样一个项目——鲜奶吧。 一、鲜奶吧:小区内的健康食品新宠 随着健康饮食观念的深…

【SpringBoot】JWT令牌

📝个人主页:五敷有你 🔥系列专栏:SpringBoot ⛺️稳重求进,晒太阳 什么是JWT JWT简称JSON Web Token,也就是通过JSON形式作为Web应用的令牌,用于各方面之间安全的将信息作为JSON对象传输…

mac终端怎么恢复初始设置?图文教程不想看看吗?

某网友说“不小心把终端弄成了这样?请问该怎么办呢?mac终端怎么恢复初始设置?” 其实,这个问题不难,在终端中选择【还原初始值】即可。 Mac终端初始化具体怎么操作?话不多说,图文教程分享给大…

10个简单有效的编辑PDF文件工具分享

10个编辑PDF文件工具作为作家、编辑或专业人士,您可能经常发现自己在处理 PDF 文件。无论您是审阅文档、创建报告还是与他人共享工作,拥有一个可靠的 PDF 编辑器供您使用都非常重要。 10个简单适用的编辑PDF文件工具 在本文中,我们将介绍当今…

前端学习之路(6) npm详解

npm 是什么? npm(node package manager):node.js 的包管理器,用于node插件管理(包括安装、卸载、管理依赖等) ,npm 是随同 node.js 一起安装的包管理工具,能解决 node.j…

Redis 基本认识

文章目录 Redis八个特性Redis应用场景Redis应用缺陷Redis使用流程 Redis八个特性 速度快 原因: ① 单线程,避免了多线程竞争(如加锁/解锁)的时间开销 ② redis的数据存放在内存中 ③ 使用C语言编写,C语言更方便操做硬件 ④ Redis 源码优秀 利用键值对存…

新手指南:Postman 旧版本(历史版本)下载

随着技术的不断发展,有时候我们发现自己需要退回到使用 Postman 某个以往的版本。这篇文章旨在指导你如何安全地移除当前版本的 Postman、查找并获取旧版本。 从你的系统中移除 Postman 为了确保旧版本的 Postman 可以无障碍地安装,首先得从你的系统中…

嵌入式中经典面试题分析

1.关键字static的作用是什么?为什么static变量只初始化一次? 1)修饰局部变量:使得变量变成静态变量,存储在静态区,存储在静态区的数据周期和程序相同, 在main函数开始前初始化,在退…

国产三维剖面仪—MPAS-100相控参量阵浅地层剖面仪

最近声学所东海站邹博士发来了他们最新的浅地层剖面仪—MPAS-100相控参量阵浅地层剖面仪的资料,市场型号GeoInsight,委托Ocean Physics Technology公司销售,地大李师兄的公司负责技术支持。 MPAS-100相控参量阵浅地层剖面仪就是俗称的三维浅…

Unity类银河恶魔城学习记录4-1,4-2 Attack Logic,Collider‘s collision excepetion源代码 P54 p55

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili Entity.cs using System.Collections; using System.Collections.Generic; u…

C/C++ - 容器vector

目录 容器特性 构造函数 默认构造函数 填充构造函数 范围构造函数 拷贝构造函数 内存布局 大小函数 size() 函数 capacity() 函数 empty() 函数 resize() 函数 增加函数 push_back(const T& value) emplace_back(Args&&... args) push_back和empla…

linux(redhat)重置root密码

首先将root密码改成几乎不可能记住的密码 [rootexample ~]# echo fheowafuflaeijifehowf|passwd --stdin root Changing password for user root. passwd: all authentication tokens updated successfully.重启系统,进入救援模式 出现此页面,按e键 lin…

一个简单的2024龙年倒计时页面html源码

预览如下 复制粘贴下面的代码&#xff0c;另存为html文件即可打开&#xff0c;文字链接都可以更改&#xff1a; <!doctype html> <html> <head> <meta charset"utf-8"> <title>2024新年倒计时</title> <style>::-webki…

Linux操作系统基础(二):Linux操作系统概述

文章目录 Linux操作系统概述 一、Linux起源 二、Linux 的含义 三、Linux发行版 Linux操作系统概述 一、Linux起源 Linux创始人——林纳斯 托瓦兹 Linux 诞生于1991年&#xff0c;作者上大学期间实现的 Linux的特点&#xff1a;开源、免费、拥有最为庞大的源码贡献者 …