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

机器学习1一knn算法

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.kler.cn/a/231656.html

相关文章:

  • Linux下编译MFEM
  • React Native 全栈开发实战班 -原生功能集成之相机与图片
  • MySQL 中的数据排序是怎么实现的
  • Python 正则表达式使用指南
  • torch.stack 张量维度的变化
  • AI 提示词(Prompt)入门 十:最佳实践|详细询问,提供细节!
  • 如何使用phpStudy搭建网站并结合内网穿透远程访问本地站点
  • @RequestBody、@RequestParam、@RequestPart使用方式和使用场景
  • 线程之间如何通信?
  • 制作jdk17+pinpoint-agent基础镜像
  • Unity类银河恶魔城学习记录4-1,4-2 Attack Logic,Collider‘s collision excepetion源代码 P54 p55
  • Rust开发WASM,浏览器运行WASM
  • 虚继承 -- 解决菱形继承问题以及无法跨继承访问
  • 【flink状态管理(四)】MemoryStateBackend的实现
  • NDK Could NOT find OpenGL (missing: OPENGL_glx_LIBRARY) Ubuntu
  • VTK 体渲染设置帧率
  • 单片机无线发射的原理剖析
  • GEE详细教程之:将Landsat8与Landsat9影像合成一个影像
  • Windows下MySQL的界面安装
  • [每日一题] 02.07 - 小鱼比可爱
  • 【射影几何13 】梅氏定理和塞瓦定理探讨
  • C#阿里云消息列队推送消息
  • 深度学习手写字符识别:训练模型
  • 计算机组成原理——计算机系统概述
  • python将word文件转换成pdf文件
  • 队列---数据结构