elm分类器功能_一文带你读懂线性分类器

本文为 AI 研习社编译的技术博客,原标题 :

Linear Classifier

作者 | Thomas Pernet

翻译 | 邓普斯•杰弗、涂世文、Disillusion

校对 | 邓普斯•杰弗 审核| 酱番梨 整理 | 菠萝妹

原文链接:

https://medium.com/@thomaspernet/linear-classifier-aa3ccec96efa

什么是线性分类器?

在有监督学习中,最主要的两种学习任务是 回归(regression) 和 分类(classification),而其中 线性回归 和 线性分类 最为常见。线性回归是预测某一个具体的值,而线性分类是数据所属类别进行预测。这里,我们主要关注线性分类问题。

一般来说,几乎 80% 机器学习任务可以看作是某种分类问题。分类,即给定一个输入的集合,分类器致力于预测每一个类别的概率。类别标记(也被称为 应变量或依赖变量)是一个离散的值,表示某个类别。如果数据中的 Label 只有两个类别,那么就属于二分类问题,相应的分类器被称为 二分类器。

多分类器解决 Label 种类多于两种类别的分类问题。

譬如,预测顾客是否会进行二次购买便是一个典型的二分类问题。而识别图片中出现动物则是属于多分类问题,因为实际情况中动物有很多种。

本文的理论部分主要关注于二分类问题。未来我们也会推出关于多分类的内容,敬请期待!

二分类器是如何工作的?

在前面的教程中你已经了解到函数由两类变量组成,一个应变量和一组特征(自变量)。在线性回归中,应变量是一个没有范围的实数。主要目标是通过最小化均方误差来预测其值。

对于二分类任务,标签可以有两个可能的整数值。在大多数情况下,要么是[0,1]要么是[1,2]。

例如,如果目标是预测客户是否会购买产品。标签可为如下:Y = 1(客户购买了产品)

Y = 0 (客户没有购买产品)

该模型使用特征X将每个客户分类到他最有可能的所属类别,即是潜在购买者,或否。

成功的概率用逻辑回归计算。该算法将根据特征X计算出一个概率,并在该概率大于50%时预测成功。概率的算式如下:

θ是权重的集合,x是特征,b是偏差

该函数可进一步分为两部分:线性模型

逻辑函数

线性模型

你已经熟悉了计算权重的方法。权重计算使用点积:θ^ Tx + b

Y是所有特征x_i的线性函数。如果模型没有特征,则预测结果为偏差b。

权值表示特征x_i与标签y之间相关性的方向。正相关增加了正类的概率,而负相关使概率更接近于0(即负类)。

线性模型只返回实数,与区间[0,1]的概率测度不一致。因此需要逻辑函数将线性模型输出转换为概率。

逻辑函数

逻辑函数,亦称sigmoid函数,为s形,且输出总是在0和1之间。

将线性回归的输出代入sigmoid函数是很容易的。它产生一个概率在0和1之间的新数字。

分类器可以将概率转化为类0到0.49之间的值分到0类

从0.5到1之间的值分到1类

如何度量显性分类器的性能?

准确度:

分类器的整体性能是用准确度量来衡量的。准确度收集所有正确值除以观测总数。例如,精度值为80%意味着模型在80%的情况下是正确的。

您可以注意到这个度量的一个缺点,特别是对于不平衡样本分类情况。当每组的观测次数不相等时,就会出现不平衡数据集。比如说,你试图用logistics函数来分类一个罕见的事件。假设分类器试图估计疾病后患者的死亡。在数据中,5%的病人去世了。您可以训练分类器来预测死亡人数,并使用准确度量来评估性能。如果分类器预测整个数据集的死亡为0,那么则95%的情况下是正确的。(也就是说,你的分类器可以直接判定都是不死亡,就可以实现非常高的准确度)

混淆矩阵:

评估分类器性能的更好方法是查看混淆矩阵。

想象的混乱矩阵的准确度进行比较的当前和预测的分类器分类。组成:二进制混淆矩阵法:TP: 真正:正确预测为实际正的预测值

FP:预测值错误地预测了实际的正值。也就是说,预测为正值的负值

FN:假负:预测为负的正值

TN:真负:正确预测为实际负的预测值

从混淆矩阵可以很容易地比较实际标签结果和预测标签结果。

精确度和灵敏度

混淆矩阵可以很好地洞察真阳性和假阳性。在某些情况下,是一个更简洁的度量。

精确度

精准度显示正类的精度。它衡量了正类预测的正确程度。

当分类器对所有正值进行完全分类时,最大得分为1。精确度本身并不是很有帮助,因为它忽略了负类。度量通常与召回成对出现。回忆也被称为敏感性或真阳性率。

灵敏性

灵敏度计算正确检测到的正类的比率。这个指标给出了模型识别正类的能力。

tensorflow实现线性分类器

对于本教程,我们将使用人口普查数据集。目的是使用人口普查数据集中的变量来预测收入水平。注意,收入是一个二元变量。如果收入大于50K,值为1

如果收入小于50K,则为0。

这个变量是你的类别标签

该数据集包括八个分类变量:工作场所

教育

婚姻的

职业

关系

种族

性别

国家

此外,六个连续变量:年龄

FNLWgt

教育数字

资本收益

资本损失

小时\周

通过这个例子,您将了解如何用张量流估计训练线性分类器,以及如何提高准确度指标。

我们将按以下步骤进行:

第一步:导入数据

第二步:数据转换

第三步:训练分类器

第四步:改进模型

第5步:超参数:Lasso & Ridge

开始分布介绍:

步骤1:导入数据

首先导入教程中使用的库。

导入TensorFlow as tf \ import pandas as pd

接下来,从UCI存档导入数据并定义列名称。您将使用列来命名pandas dataframe。

请注意,您将使用Pandas dataframe来训练分类器。

import pandas as pd

import tensorflow as tf

## Define path data

COLUMNS = ['age','workclass', 'fnlwgt', 'education', 'education_num', 'marital',

'occupation', 'relationship', 'race', 'sex', 'capital_gain', 'capital_loss',

'hours_week', 'native_country', 'label']

PATH = "https://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.data"

PATH_test = "https://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.test"

/Users/Thomas/anaconda3/envs/hello-tf/lib/python3.6/importlib/_bootstrap.py:219: RuntimeWarning: compiletime version 3.5 of module 'tensorflow.python.framework.fast_tensor_util' does not match runtime version 3.6

return f(*args, **kwds)

在线存储的数据已经在训练组和测试组之间进行了划分。

df_train = pd.read_csv(PATH, skipinitialspace=True, names = COLUMNS, index_col=False)

df_test = pd.read_csv(PATH_test,skiprows = 1, skipinitialspace=True, names = COLUMNS, index_col=False)

训练数据集合包含32561组数据,测试数据集中包含16281组数据;

print(df_train.shape, df_test.shape)

print(df_train.dtypes)

(32561, 15) (16281, 15)

age int64

workclass object

fnlwgt int64

education object

education_num int64

marital object

occupation object

relationship object

race object

sex object

capital_gain int64

capital_loss int64

hours_week int64

native_country object

label object

dtype: object

TensorFlow需要一个布尔值来训练分类器。您需要将值从字符串转换为整数。标签存储为一个对象,但是,您需要将其转换为一个数值。下面的代码创建一个字典,其中包含要转换的值,并在列项上循环。请注意,您执行此操作两次,一次针对训练数据集,一次用于测试数据集;

label = {'<=50K': 0,'>50K': 1}

df_train.label = [label[item] for item in df_train.label]

label_t = {'<=50K.': 0,'>50K.': 1}

df_test.label = [label_t[item] for item in df_test.label]

训练数据中,50K以下收入24720人,以上收入7841人。测试集的比率几乎相同。有关更多信息,请参阅本教程中的方面。

print(df_train["label

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值