目录

前言

提出问题

一、介绍

1.分类简介

2.imblearn的安装

二、数据加载及预处理

1.加载并查看数据

①导入Python第三方库

②调用并查看数据

2.查看数据分布

①各国样本分布直方图

②各国样本划分

3.各国最受欢迎食材可视化

4.平衡数据集

①样本插值采样

三、分类器选择

四、逻辑回归模型构建

1.数据导入及查看

2.可训练特征与预测标签选择及数据集划分

3.构建逻辑回归模型及精度评价

4.模型测试

五、更多分类模型

1.第三方库导入

2.测试不同分类器

①线性SVC分类器

②K-近邻分类器

③SVM分类器

④集成分类器

六、模型发布为Web应用

1.模型打包

2.配置Flask应用

②app.py

3.应用运行及测试

结论


前言

在本文中,你将学到:

0 复习数据预处理及可视化

1 了解分类的基本概念

2 使用多种分类器来对比模型精度

3 掌握使用分类器列表的方式来批处理不同模型

4 将机器学习分类模型部署为Web应用

提出问题

本文我们所用的数据集是亚洲美食数据集,其包括了亚洲5个国家的美食食谱与所属的国家。我们构建模型的目的是解决:

如何根据美食所用食材判断其所属国家

以美食食材为可训练特征,所属国家为预测标签构建机器学习分类模型。

一、介绍

1.分类简介

分类是经典机器学习的基本重点,也是监督学习的一种形式,与回归技术有很多共同之处。其通常分为两类:二元分类和多元分类。本文中,我将使用亚洲美食数据集贯穿本次学习。

还记得我在之前文章中提到的:

0 线性回归可帮助我们预测变量之间的关系,并准确预测新数据点相对于该线的位置。因此,例如,预测南瓜在9月与12月的价格。

1 Logistic回归帮助我们发现“二元类别”:在这个价格点上,这是橙子还是非橙子?

分类也是机器学习人员和数据科学家的基本工作之一。从二分类(判断邮件是否是垃圾邮件),到使用计算机视觉的复杂分类和分割,其在很多领域都有着很大的作用。

以更科学的方式陈述该过程:

我们所使用的分类方法创建了一个预测模型,这个模型使我们能够将输入变量之间的关系映射到输出变量。

分类使用各种算法来确定数据点的标签或类别。我们以亚洲美食数据集为例,看看通过输入一组特征样本,我们是否可以确定其菜肴所属的国家。

以下是经典机器学习常用的分类方法。

0 逻辑回归

1 决策树分类(ID3、C4.5、CART)

2 基于规则分类

3 K-近邻算法(K-NN)

4 贝叶斯分类

5 支持向量机(SVM)

6 随机森林(Random Forest)

2.imblearn的安装

在开始本文学习之前,我们第一个任务是清理和调整数据集以获得更好的分析结果。我们需要安装的是imblearn库。这是一个基于Python的Scikit-learn软件包,它可以让我们更好地平衡数据。

在命令行中输入以下代码,使用阿里的镜像来安装 imblearn

pip install -i https://mirrors.aliyun.com/pypi/simple/ imblearn

看到如下图所示代表安装成功。

二、数据加载及预处理

1.加载并查看数据

①导入Python第三方库

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
from imblearn.over_sampling import SMOTE

②调用并查看数据

df  = pd.read_csv('cuisines.csv')
df.head()

前5行数据如下图所示:

查看数据结构:

df.info()

通过查看数据与其组织结构,我们可以发现数据有2448行,385列,其中有大量的无效数据。

2.查看数据分布

我们可以对数据进行可视化来发现数据集中的数据分布。

①各国样本分布直方图

通过调用barh()函数将数据绘制为柱状图。

df.cuisine.value_counts().plot.barh() #根据不同国家对数据集进行划分

结果如下:

我们可以看到,数据集中以韩国料理样本最多,泰国样本最少。美食的数量有限,但数据的分布是不均匀的。我们可以解决这个问题!在此之前,请进一步探索。

②各国样本划分

了解各国美食有多少可用数据并将其打印输出。输入以下代码,从结果中我们可以看到不同国家美食的可用数据:

thai_df = df[(df.cuisine == "thai")]#提取泰国美食
japanese_df = df[(df.cuisine == "japanese")]#提取日本美食
chinese_df = df[(df.cuisine == "chinese")]#提取中国美食
indian_df = df[(df.cuisine == "indian")]#提取印度美食
korean_df = df[(df.cuisine == "korean")]#提取韩国美食
print(f'thai df: {thai_df.shape}')#输出数据结构
print(f'japanese df: {japanese_df.shape}')#输出数据结构
print(f'chinese df: {chinese_df.shape}')#输出数据结构
print(f'indian df: {indian_df.shape}')#输出数据结构
print(f'korean df: {korean_df.shape}')#输出数据结构

3.各国最受欢迎食材可视化

现在,我们可以更深入的挖掘数据,并了解每种菜肴的成分。在此之前,我们应该对数据进行预处理,删去重复值。

在python中创建一个函数来删除无用的列,然后按成分数量进行排序。

def create_ingredient_df(df):ingredient_df = df.T.drop(['cuisine','Unnamed: 0']).sum(axis=1).to_frame('value')#从原始数据中删除无效列并统计axis=1的总和赋值给value列ingredient_df = ingredient_df[(ingredient_df.T != 0).any()]#提取所有非0值的样本ingredient_df = ingredient_df.sort_values(by='value', ascending=False,inplace=False)#按照数值的大小进行排序return ingredient_df#返回处理并排序后的结果

现在,我们调用create_ingredient_df()函数来了解泰国美食中,最受欢迎的十大食材。输入以下代码:

thai_ingredient_df = create_ingredient_df(thai_df)
thai_ingredient_df.head(10).plot.barh()

查看泰国美食中十大最受欢迎的食材:

我们可以看到,第一名的食材是garlic(大蒜),第十名则是chicken(鸡肉)。

对中国数据执行同样的操作:

chinese_ingredient_df = create_ingredient_df(chinese_df)
chinese_ingredient_df.head(10).plot.barh()

结果如下,中国美食食材中,最受欢迎的是soy_sauce(酱油),第十名是cayenne(红辣椒):

同理,我们也可以输出其他国家的美食食材,这里就不水文了。大家可自行尝试。

现在,我们需要使用drop()函数删除不同美食间造成混淆的最常见成分以突出各国食材的特色,每个国家的人都喜欢米饭、大蒜和生姜。(可自行可视化查看),我们输入以下代码将其删去。

feature_df= df.drop(['cuisine','Unnamed: 0','rice','garlic','ginger'], axis=1)#删去最常见的这几列以平衡不同国家之间的混淆
labels_df = df.cuisine 

4.平衡数据集

现在我们已经清理了数据,因为不同国家的样本数量差异较大,我们需要使用SMOTE(“合成少数过度采样技术”)来平衡它。

SMOTE介绍

①样本插值采样

调用SMOTE对象的 fit_resample() 函数来插值重采样生成新样本。输入以下代码:

oversample = SMOTE()
transformed_feature_df, transformed_label_df = oversample.fit_resample(feature_df, labels_df)
print(f'new label count: {transformed_label_df.value_counts()}')
print(f'old label count: {df.cuisine.value_counts()}')

查看新样本与旧样本的数据量差异:

我们可以看到,新样本不同类别标签下的样本数量都在799,它是以旧样本中最大样本量标签为基础构建的,而旧样本则参差不齐,分布不均匀。

数据质量很好,干净、平衡!

一文读懂机器学习分类全流程相关推荐

  1. 【新能源】从“材料”到“电池组”一文读懂动力电池生产全流程!

    锂离子电池是一个复杂的体系,包含了正极.负极.隔膜.电解液.集流体和粘结剂.导电剂等,涉及的反应包括正负极的电化学反应.锂离子传导和电子传导,以及热量的扩散等,因此锂离子电池的电性能.安全性受到多种因 ...

  2. 【深度学习】一文读懂机器学习常用损失函数(Loss Function)

    [深度学习]一文读懂机器学习常用损失函数(Loss Function) 最近太忙已经好久没有写博客了,今天整理分享一篇关于损失函数的文章吧,以前对损失函数的理解不够深入,没有真正理解每个损失函数的特点 ...

  3. 一文读懂机器学习中奇异值分解SVD

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 目录: 矩阵分解 1.1 矩阵分解作用 1.2 矩阵分解的方法一文 ...

  4. 一文读懂机器学习中的模型偏差

    一文读懂机器学习中的模型偏差 http://blog.sina.com.cn/s/blog_cfa68e330102yz2c.html 在人工智能(AI)和机器学习(ML)领域,将预测模型参与决策过程 ...

  5. 一文读懂机器学习与深度学习的联系与区别

    一文读懂机器学习与深度学习的联系与区别 https://mp.weixin.qq.com/s/6Zk5JxBUs_Op1wwiY4EIZA 翻译:  Tocy, kevinlinkai, 雪落无痕xd ...

  6. 原创 | 一文读懂机器学习中的shapley值方法

    作者:贾恩东本文约2000字,建议阅读9分钟本文为你介绍更公平分配利益权重的一种算法--Shapley值方法. 本篇文章是数据派一文读懂系列的新年第一篇原创,在这里祝贺大家新年学业有新成就,生活有新气 ...

  7. 推荐文章:机器学习:“一文读懂机器学习,大数据/自然语言处理/算法全有了...

    PS:文章主要转载自CSDN大神"黑夜路人"的文章:           http://blog.csdn.NET/heiyeshuwu/article/details/43483 ...

  8. 机器学习科普文章:“一文读懂机器学习,大数据/自然语言处理/算法全有了”

    PS:文章主要转载自CSDN大神"黑夜路人"的文章:           http://blog.csdn.net/heiyeshuwu/article/details/43483 ...

  9. 一文读懂机器学习,大数据/自然语言处理/算法全有了…… (非常好)

    http://www.open-open.com/lib/view/open1420615208000.html 阅读文件夹 1.一个故事说明什么是机器学习 2.机器学习的定义 4.机器学习的方法 5 ...

  10. 一文读懂机器学习,大数据/自然语言处理/算法全有了

    转载至:http://www.cnblogs.com/subconscious/p/4107357.html 在本篇文章中,我将对机器学习做个概要的介绍.本文的目的是能让即便完全不了解机器学习的人也能 ...

最新文章

  1. c语言案例——输入一个字符串,将其逆序输出
  2. SQL 100+个最佳入门案例实践(覆盖Oralce、SQL Server、Mysql)之基础操作_1_检索数据
  3. gprof, Valgrind and gperftools - an evaluation of some tools for application level CPU profiling on
  4. 枚举算法:概率计算。在标注编号分别为1,2,...,n的n张牌中抽取3张,试求抽出3张牌编号之和为素数的概率。输入整数n(3<n<=3000),输出对应的概率(四舍五入到小数点后第3位)。
  5. form中的get和post方法
  6. 计算机组成mod2是什么意思,计算机组成原理 第2讲_数据表示.ppt
  7. Ubuntu上安装ns2-2.34
  8. C语言中TC20是什么意思,c语言tc20下载
  9. 360的服务器在哪个文件夹,360rec是什么文件夹?可以删除吗?
  10. STIM300读取数据
  11. 电脑重装系统后无法上网怎么办
  12. 教你用电脑键盘打出“囍”字
  13. Linux中常见的ping不通百度问题
  14. android 加载图片进度条,实现微信图片加载显示进度的效果-LoadingProgress
  15. CCF推荐|中科院2区生物信息与计算机类SCI征稿~
  16. 调用方法[manageApp]时发生异常 java.lang.IllegalStateException: 启动子级时出错
  17. 改变radio默认样式
  18. java中io流,Reader和Writer,InputStream和OutputStream,转换流 InputStreamReader 和 OutputStreamWriter
  19. layui制作二维码
  20. vscode的搜索技巧

热门文章

  1. window10 删除桌面删除不掉的ie图标(快捷方式)
  2. 自带浏览器打不开网页?
  3. 二次型特征值的猜根法应用
  4. 怎么解决在微信中不能直接下载APP(APK)的方案
  5. Git上传项目提示Push rejected: Push to origin/master was rejected解决办法
  6. Kafka及控制台【后台管理界面】部署
  7. kali Linux桌面环境切换
  8. WORD-如何解除WORD文档的锁定
  9. ckeditor5加字数_ckeditor 字数限制
  10. 酒店管理系统数据库SQl设计思路