人工分类和逻辑分类

人工分类

重要点:

  1. 分类的意义,什么样的业务属于分类,分类的意义是什么?
  2. 如何绘制分类均线?
特征1特征2输出
310
251
181
640
520
351
471
4-10
681
510
分类均线的绘制:

将空间分为很多个小格子,然后通过样本去预测每个格子应该属于哪一类,然后去绘制分类局限,比如在上面的表格中可以发现,当x>y时为0,当x<y时为1
在这里插入图片描述
再在相应的格子化为不同的颜色,这样分类均线就可以自然而言的出现,效果如下图
在这里插入图片描述
案例:

"""
人工分类
"""
import numpy as np
import matplotlib.pyplot as mp
x = np.array([
    [3, 1],
    [2, 5],
    [1, 8],
    [6, 4],
    [5, 2],
    [3, 5],
    [4, 7],
    [4, -1]])
y = np.array([0, 1, 1, 0, 0, 1, 1, 0])
# 绘制分类边界
l, r = x[:, 0].min() - 1, x[:, 0].max() + 1
b, t = x[:, 1].min() - 1, x[:, 1].max() + 1
# 把可视区间划分为 500 * 500,
n = 500
grid_x,grid_y = np.meshgrid(np.linspace(l,r,n),
            np.linspace(b,t,n))
# 模拟使用模型,使用点阵中的每个坐标的类别
grid_z = np.piecewise(grid_x,[grid_x>grid_y,grid_x<grid_y],
                      [0,1])
# 画图
mp.figure('Simple classification', facecolor='lightgray')
mp.title('Simeple Classification', fontsize=16)
# 调用mp.pcolormesh() 绘制分类边界线
# 根据参数,把可视区间拆分为坐标网格,由于每个网格
# 都有相应类别,可以使用cmap为每个网格填充颜色
mp.pcolormesh(grid_x,grid_y,grid_z,cmap='rainbow')
mp.scatter(x[:, 0], x[:, 1], s=70, label='Sample Points', c=y, cmap='jet')
mp.show()

逻辑分类

通过输入的样本数据,基于多元线性回归模型求出线性预测方程
y = w0+w1x1+w2x2
通过带入样本的数据来求解参数,也就是一个训练模型的过程。
比如就可以去预测上述的样本点是属于样本1 还是样本2 ,但是我们知道在通过训练数据得到的表达式得到的结果就一定是1 或者0 吗?这是不一定的,所以我们还要对得到的结果进行一次处理,通过线型回归方程返回的是连续值,不可以直接用于分类业务模型,所以急需一种方式使得把连续的预测值->离散的预测值。 [-oo, +oo]->{0, 1}
逻 辑 函 数 s i g m o i d : y = 1 1 + e − x 逻辑函数 sigmoid:y = \frac{1}{1+e^{-x}} sigmoidy=1+ex1
它的图像是这样的:
在这里插入图片描述
该逻辑函数当x>0,y>0.5;当x<0, y<0.5; 可以把样本数据经过线性预测模型求得的值带入逻辑函数的x,即将预测函数的输出看做输入被划分为1类的概率,择概率大的类别作为预测结果,可以根据函数值确定两个分类。这是线性函数非线性化的一种方式。

逻辑回归相关的API
import sklearn.linear_model as lm
# 构建逻辑回归器 
# solver:逻辑函数中指数的函数关系(liblinear为线型函数关系)
# C:参数代表正则强度,为了防止过拟合。正则越大拟合效果越小。
model = lm.LogisticRegression(solver='liblinear', C=正则强度)
model.fit(训练输入集,训练输出集)
result = model.predict(带预测输入集)

现在将上述的案例用逻辑回归器来绘制

import numpy as np
import sklearn.linear_model as lm
import matplotlib.pyplot as mp
x = np.array([
    [3, 1],
    [2, 5],
    [1, 8],
    [6, 4],
    [5, 2],
    [3, 5],
    [4, 7],
    [4, -1]])
y = np.array([0, 1, 1, 0, 0, 1, 1, 0])
# 逻辑分类器
model = lm.LogisticRegression(solver='liblinear',C=1)
model.fit(x,y)
l, r = x[:, 0].min() - 1, x[:, 0].max() + 1
b, t = x[:, 1].min() - 1, x[:, 1].max() + 1
n = 500
grid_x,grid_y = np.meshgrid(np.linspace(l,r,n),np.linspace(b,t,n))
samples =np.column_stack((grid_x.ravel(),grid_y.ravel()))
grid_z = model.predict(samples)
grid_z = grid_z.reshape(grid_x.shape)
mp.figure('Logistic Classification', facecolor='lightgray')
mp.title('Logistic Classification', fontsize=20)
mp.xlabel('x', fontsize=14)
mp.ylabel('y', fontsize=14)
mp.tick_params(labelsize=10)
mp.pcolormesh(grid_x, grid_y, grid_z, cmap='rainbow')
mp.scatter(x[:, 0], x[:, 1], c=y, cmap='brg', s=80)
mp.show()
多元分类

通过多个二元分类器解决多元分类问题,主要思路就是将复杂问题简单化。但是当调用api的时候方法和普通的逻辑分类没有任何的不同,就是训练样本不同

特征1特征2==>所属类别属于A概率属于B概率属于C概率
47==>A0.70.10.2
3.58==>A0.60.20.2
1.21.9==>B0.10.80.1
5.42.2==>C0.20.10.7

若拿到一组新的样本,可以基于二元逻辑分类训练出一个模型判断属于A类别的概率。再使用同样的方法训练出两个模型分别判断属于B、C类型的概率,最终选择概率最高的类别作为新样本的分类结果。

案例:基于逻辑分类模型的多元分类。

import numpy as np
import sklearn.linear_model as lm
import matplotlib.pyplot as mp

x = np.array([
    [4, 7],
    [3.5, 8],
    [3.1, 6.2],
    [0.5, 1],
    [1, 2],
    [1.2, 1.9],
    [6, 2],
    [5.7, 1.5],
    [5.4, 2.2]])
y = np.array([0, 0, 0, 1, 1, 1, 2, 2, 2])
# 逻辑分类器
model = lm.LogisticRegression(solver='liblinear', C=1000)
model.fit(x, y)
l, r = x[:, 0].min() - 1, x[:, 0].max() + 1
b, t = x[:, 1].min() - 1, x[:, 1].max() + 1
n = 500
# 从制定范围内拆除500个点
grid_x, grid_y = np.meshgrid(np.linspace(l, r, n), np.linspace(b, t, n))
samples = np.column_stack((grid_x.ravel(), grid_y.ravel()))
grid_z = model.predict(samples)
grid_z = grid_z.reshape(grid_x.shape)
mp.figure('Logistic Classification', facecolor='lightgray')
mp.title('Logistic Classification', fontsize=20)
mp.xlabel('x', fontsize=14)
mp.ylabel('y', fontsize=14)
mp.tick_params(labelsize=10)
mp.pcolormesh(grid_x, grid_y, grid_z, cmap='jet')
mp.scatter(x[:, 0], x[:, 1], c=y, cmap='brg', s=80)
mp.show()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值