机器学习---分类入门

| 1.1 引言

如果您阅读了《机器学习---概述》这篇所讲述的内容,您会对分类有一个大致的了解。同时我们也提及了监督学习非监督学习。监督学习意味着我们将标记历史数据,我们将使用这些数据来通知我们的模型。我们将我们试图预测的标签或事物称为目标。所以在监督学习中,历史数据有一个已知的目标,而对于无监督学习,没有已知的目标。

监督学习中,有分类回归。分类问题的目标是一个分类值(通常是 True 或 False,但可以是多个类别)。回归问题的目标是数值的问题。

例如,预测房价是一个回归问题。它是受监督的,因为我们有过去房屋销售的历史数据。这是回归,因为房价是一个数值。

预测某人是否会拖欠贷款是一个分类问题。同样,它是受监督的,因为我们有过去贷款人是否违约的历史数据,这是一个分类问题,因为我们试图预测贷款人是否属于两个类别之一(违约与否)。

注:后面我们会接触一种算法叫逻辑回归,虽然名称中有回归,但它是一种用于解决分类问题的算法,而不是回归问题。

| 2.1 分类术语(Classification Terminology)

让我们来看一下机器学习初学者常见的数据集---《Titanic》(泰坦尼克数据集),

注 : titanic.csv文件可在文末获取​​​​​​​

import pandas as pddf = pd.read_csv("titanic.csv")print(df.head())

观察上图,Survived字段是我们试图预测的。我们称之为目标。你可以看到它是一个 1 和 0 的列表。1 表示乘客幸存,0 表示乘客没有幸存。

剩下的列是我们可以用来预测目标的乘客信息。我们将这些列中的每一列称为一个特征。特征是我们用来进行预测的数据。

虽然我们知道数据集中的每位乘客是否幸存下来,但我们希望能够对我们无法为其收集数据的其他乘客做出预测。换句话说,你随便让一个人去泰坦尼克号上,给出他的信息,预测他是否会幸存。我们将建立一个机器学习模型来帮助我们做到这一点。

| 2.1 分类的线性模型(Linear Model for Classification)

| 2.11 图形分类(Classification Graphically)

我们最终会想要使用所有的功能,但为简单起见,我们只从其中两个功能(票价和年龄)开始。使用两个特征使我们能够在图表中可视化数据。

在 x 轴上是乘客的票价,在 y 轴上是他们的年龄。黄色的点是幸存的乘客,紫色的点是没有幸存的乘客。

想要可视化出数据,我们使用matplotlib,如果你不熟悉,请参考《数据科学---使用Matplotlib进行数据可视化》。​​​​​​​

import pandas as pdimport matplotlib.pyplot as pltdf = pd.read_csv("titanic.csv")plt.xlabel('Fare')plt.ylabel('Age')plt.scatter(df['Fare'],df['Age'], c=df['Survived'])

您可以看到图表底部的黄点比顶部多。这是因为儿童比成人更有可能存活下来,这符合我们的直觉。同样,图表右侧有更多黄点,这意味着支付更多费用的人更有可能生存。

线性模型的任务是找到最能区分这两个类的线,使黄色点在一侧,紫色点在另一侧。


下图一条不错的线的例子(表述的更加清楚的应该是一个二元一次方程的函数图像)。该线路用于预测新乘客。如果乘客的数据点位于线路的右侧,我们会预测他们会幸存下来。如果在左侧,我们会预测他们无法生存。

Tips : 所以按照上篇文章的内容我们将构建模型,构建模型的挑战将是确定可能的最佳线路是什么。

| 2.12 线性方程(Equation for the Line)

一条线由以下形式的等式定义,我们也将其称为二元一次方程的一般式:

0 = ax + by + c

a、b 和 c 的值是系数。任何三个值都将定义一条唯一的线。

让我们看一下系数为 a=1、b=-1 和 c=-30 的直线的具体示例。

0 = (1)x + (-1)y + (-30)

三个系数分别为:1、-1、-30 回想一下,我们一直在用 x 轴表示票价,y 轴表示乘客的年龄来绘制数据。要从等式中画一条线,我们需要在线上的两个点。例如,我们可以看到点 (30, 0) 正好在线上 (Fare 30, Age 0)。如果我们把它代入方程,它就可以解决。我们还可以看到点 (50, 20) 也在线上 (Fare 50, Age 20)

展示在图表上的样子:

Tips : 方程的系数控制线的位置。

| 2.13 基于线性方程做出预测

如果我们获取乘客的数据,我们可以使用这个等式来确定他们落在线路的哪一侧。例如,假设我们有一位乘客,其票价为 100,年龄为 20。

让我们将这些值代入我们的方程:

(1)100 + (-1)20 - 30 = 100 - 20 - 30 = 50

由于该值为正,因此该点位于线的右侧,我们可以预测乘客幸免于难。

现在假设一位乘客的票价为 10,他们的年龄为 50。让我们将这些值代入等式。

(1)10 + (-1)50 - 30 = -70

由于该值为负,因此该点位于线的左侧,我们可以预测乘客没有幸存。

我们可以在下图中看到这两点。

Tips : 一个点位于直线的哪一边,决定了我们是否认为乘客会幸存下来。

| 2.14 好的函数该如何找到?

让我们看看两条不同的线。首先,我们有迄今为止一直在使用的二元一次函数。我们称之为第 1 条线。

0 = (1)x + (-1)y - 30 

接下来我们有另一个直线方程。我们称之为第 2 条线。

0 = (4)x + (5)y - 400 

如果我们查看这两条线,我们会看到第 1 条线右侧的黄色点较多,左侧的紫色点较多。第 2 条线的右侧没有很多点;大多数紫色和黄色点都在左侧。这使得第 1 条线成为首选项,因为它在分割黄色和紫色点方面做得更好。我们需要在数学上定义这个想法,以便我们可以通过算法找到最佳线,说明你需要了解一定的数学知识(关于数学后面也会介绍)。

Tips : 逻辑回归是一种在数学上找到最佳线的方法,那是我们下一篇将会描述的内容。

| 2.15 完整代码​​​​​​​

import pandas as pdimport numpy as npimport matplotlib.pyplot as plt
df = pd.read_csv("titanic.csv")plt.ylabel('Age')plt.xlabel('Fare')# 绘制散点图plt.scatter(df['Fare'], df['Age'], c=df['Survived'])
# 构造二元一次方程y = np.arange(0, 80, 1)c = 30x = y + c
# 绘制直线plt.plot(x, y, 'c')

当然,你也可以访问github存储库来下载代码:

https://github.com/Zesheng-Wang/Machine-Learning

References:​​​​​​​

https://www.kaggle.com/arshid/iris-flower-datasethttps://www.datacamp.com/community/tutorials/machine-learning-in-rhttps://en.wikipedia.org/wiki/Iris_flower_data_sethttps://towardsdatascience.com/machine-learning-classifiersGetting started with Classification---Sarthak Yadav

| 4.1 写在最后

学习不是一蹴而就的,机器学习所涉及的内容非常宽泛,后面可能还会涉及一些数学公式。不过作为一种面向应用的方式方法,在不同的场景下同样有着不同的解决方式,希望今天的内容可以帮你了解什么是分类,从根本上理解机器学习,而不是做一个调包侠,希望可以帮你打下坚实的基础。

勘误:

由于我自己也不是资深编程高手,在创作此内容时尽管已经力求精准,查阅了诸多资料,还是难保有所疏漏,如果各位发现有误可以公众号内留言,欢迎指正。

你要偷偷学Python,然后惊艳所有人。

-END-

感谢大家的关注

   你关心的,都在这里

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值