我是靠谱客的博主 成就手套,最近开发中收集的这篇文章主要介绍手工实现水果分类器-1NN第一篇 机器学习–手工实现水果分类器,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

本文内容为学习麻瓜编程python–实用主义教学,整理的学习笔记,作为复习的资料,后边忘了的时候回来看看。

麻瓜编程官网 https://www.mugglecode.com/

数据集(详细描述见下方)提取地址:https://video.mugglecode.com/fruit_data.csv


第一篇 机器学习–手工实现水果分类器


文章概览

什么是机器学习?
水果分类器是怎么实现的?


什么是机器学习?

  • “学习”问题通常包括n个数据样本(训练样本)
  • 每个样本函数有特定的属性(特征)
  • 通过特定的算法从训练样本中学习到知识(信息),从而建立一个模型。
  • 然后预测位置数据(测试样本)的信息

水果分类器是怎么实现的?

01 问题拆解

  • 如何分割数据集,用于训练和验证模型?
  • 如何计算样本的距离?
  • 如何找到最近的样本?
  • 如何验证模型?

02 解决思路

  • 利用scikit-learn模块中的train_test_split()方法进行数据集的划分,其中test_size用于指定测试集的大小,这里test_size=1/5;random_state:用于指定随机状态,通常设定一个固定的数字用于重复实验,这里random_state=20;
  • 利用SciPy模块中的欧式距离euclidean()计算空间中两个点的距离,及样本间的距离;
  • 利用NumPy模块中的argmin()找到距离值最小的样本,即最近的样本
  • 使用“准确率”进行模型的验证,即识别对的样本数目除以总的测试样本数目。

03 实现代码

import pandas as pd
from sklearn.model_selection import train_test_split
from scipy.spatial.distance import euclidean
import numpy as np
# 水果的四个特征
fruit_feat = ['mass', 'width', 'height', 'color_score']
def pred_test(test_sample_feat, train_data):
list_dis = []
for idx, row in train_data.iterrows():
train_sample_feat = row[fruit_feat].values
# 得到空间中的两个点之间的距离,返回一个数字
dis = euclidean(test_sample_feat, train_sample_feat)
# 把所有数字加到一个列表中
list_dis.append(dis)
# 获取列表中最小值的索引
pos = np.argmin(list_dis)
# 根据索引取到该值
pred_label = train_data.iloc[pos]['fruit_name']
return pred_label
def main():
# 读取数据集
df = pd.read_csv("./fruit_data.csv")
print(df.head())
right_data = 0
# 划分数据集
train_data, test_data = train_test_split(df, test_size=1/5, random_state=20)
# 遍历测试集的每一行
for idx, row in test_data.iterrows():
# 获取四个特征的值,返回一个列表
test_sample_feat = row[fruit_feat].values
# 调用上方预测函数,返回预测值
pred_label = pred_test(test_sample_feat, train_data)
# print(row['fruit_name'])
# print(type(row))
# print(row.index)
# print(row.values)
# print(idx)
# print(row)
# print(test_sample_feat)
# 真实值
real_label = row['fruit_name']
print('样本{}的真实标签:{},预测标签:{}'.format(idx, real_label, pred_label))
if pred_label == real_label:
right_data += 1
acc_rate = right_data / test_data.shape[0]
print('预测准确率为:{:.2f}%'.format(acc_rate * 100))
if __name__ == '__main__':
main()

04 运行结果

样本4的真实标签:mandarin,预测标签:mandarin
样本23的真实标签:apple,预测标签:apple
样本17的真实标签:apple,预测标签:apple
样本56的真实标签:lemon,预测标签:lemon
样本37的真实标签:orange,预测标签:orange
样本12的真实标签:apple,预测标签:orange
样本52的真实标签:lemon,预测标签:lemon
样本5的真实标签:mandarin,预测标签:mandarin
样本24的真实标签:orange,预测标签:orange
样本36的真实标签:orange,预测标签:orange
样本44的真实标签:lemon,预测标签:lemon
样本2的真实标签:apple,预测标签:apple
预测准确率为:91.67%


05 数据集

fruit_data.csv,包含了59个水果的的数据样本。

  • 共5列数据
  • fruit_name:水果类别
  • mass: 水果质量
  • width: 水果的宽度
  • height: 水果的高度
  • color_score: 水果的颜色数值,范围0-1。
  • 0.85 - 1.00:红色
  • 0.75 - 0.85: 橙色
  • 0.65 - 0.75: 黄色
  • 0.45 - 0.65: 绿色

最后

以上就是成就手套为你收集整理的手工实现水果分类器-1NN第一篇 机器学习–手工实现水果分类器的全部内容,希望文章能够帮你解决手工实现水果分类器-1NN第一篇 机器学习–手工实现水果分类器所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部