栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Python

观看B站帅器学习的knn算法

Python 更新时间:发布时间: 百科书网 趣学号

用knn完成水果分类
  • 代码
    • 每部分的含义
    • 导入数据集
    • 分析数据集
    • 数据预处理
    • 模型训练

代码 每部分的含义
import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn import metrics
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
train_set=pd.read_csv('data.txt',sep='t')
train=pd.concat([train_set['mass'],train_set['width'],
                train_set['height'],train_set['color_score']],axis=1)
train=np.array(train)
scaler=StandardScaler()
train=scaler.fit_transform(train)
label=np.array(train_set['fruit_label'])
x_train,x_test,y_train,y_test=train_test_split(train,label,test_size=0.2,random_state=1)
knn=KNeighborsClassifier(n_neighbors=5,weights='distance')
knn.fit(x_train,y_train)
y_pred=knn.predict(x_test)
print("model accuracy",metrics.accuracy_score(y_test,y_pred))

代码中的水果分类数据集,fruit_data_with_colors.txt我已经上传至博客
或者直接在kaggle中下载fruit_data_with_colors.txt

导入数据集
train_set=pd.read_csv('data.txt',sep='t')

read_csv不只能读入csv,而且还能读入txt,参数sep,
这里设置的是sep=’t’,代表的是用tab键分割,原因是使用txt文件是以tab键分隔的。
sep指定分隔符。如果不指定参数,则会尝试使用逗号分隔。分隔符长于一个字符并且不是‘s+’,将使用python的语法分析器。并且忽略数据中的逗号。正则表达式例子:’rt’

**这里补充说明一下‘s+’,大佬们可以选择跳过:

详解 “s+”

正则表达式中s匹配任何空白字符,包括空格、制表符、换页符等等, 等价于[ fnrtv]

f -> 匹配一个换页
n -> 匹配一个换行符
r -> 匹配一个回车符
t -> 匹配一个制表符
v -> 匹配一个垂直制表符
而“s+”则表示匹配任意多个上面的字符。

分析数据集

不同种类的水果已经编号了,所以这里可以直接作为样本的类别。
水果名称与子类名称可以不用考虑进特征中,因为他们是文本。
下一步质量、宽度、高度、颜色这些特征数据提取出来,经过标准化作为训练数据。

数据预处理

(1)提取特征数据

train=pd.concat([train_set['mass'],train_set['width'],
                train_set['height'],train_set['color_score']],axis=1)

pd.concat合并多个数组,因为axis=1,所以我们改变的axis=1的变化,axis=0他的行数不变,后期我会专门出一篇文章关于sum,rehape方法中axis的变化。
(2)转换成numpy形式

train=np.array(train)

以便数据标准化
(3)
数据标准化

scaler=StandardScaler()
train=scaler.fit_transform(train)

sklearn中有两种标准化方式:两者都在sklearn.preprocessing模块下
1:scale
2:StandardScaler(我们这里用StandardScaler,两者的区别我会专门出一篇博客讲)
(4)
将类别标签存入数组label

label=np.array(train_set['fruit_label'])
模型训练

(1)分割数据集

x_train,x_test,y_train,y_test=train_test_split(train,label,test_size=0.2,random_state=1)

参数random_state为了固定我们随机分割数据集产生的结果。random_state=1,无论我们分割几次,我们都只有一种结果,并且根据random_state=1这个标识我们可以返回。
test_szie=0.2可以用train_size=0.8替换。表示的是训练数据与测试数据8,2分。

(2)创建模型,放入训练数据

knn=KNeighborsClassifier(n_neighbors=5,weights='distance')
knn.fit(x_train,y_train)

n_neighbors=5,表示选择的是周围五个节点
wights(权重)这个参数还可以选择
1uniform统一权重
2distance距离倒数
3callable此方法接收一个距离的数组,返回一个相同形状并且包含权重的数组。
(3)放入测试数据

y_pred=knn.predict(x_test)

(4)比较精确度

print("model accuracy",metrics.accuracy_score(y_test,y_pred))
转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/280839.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号