🚀 优质资源分享 🚀
学习路线指引(点击解锁) | 知识定位 | 人群定位 |
---|---|---|
🧡 Python实战微信订餐小程序 🧡 | 进阶级 | 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。 |
💛Python量化交易实战💛 | 入门级 | 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统 |
简介:分类是指利用数据的特性将其分成若干类型的过程。
监督学习分类器就是用带标记的训练数据建立一个模型,然后对未知数据进行分类。
一、简单分类器
首先,用numpy创建一些基本的数据,我们创建了8个点;
查看代码
X = np.array([[3, 1], [2, 5], [1, 8], [6, 4], [5, 2], [3, 5], [4, 7], [4, -1]])
给这8个点的数据赋予默认的分类标签
查看代码
y = [0, 1, 1, 0, 0, 1, 1, 0]
class_0 = np.array([X[i] for i in range(len(X)) if y[i] == 0])
class_1 = np.array([X[i] for i in range(len(X)) if y[i] == 1])
我们将这些数据画出来看看
查看代码
plt.figure()
# 画散点图 (scatterplot)
plt.scatter(class_0[:, 0], class_0[:, 1], color='black', marker='s')
plt.scatter(class_1[:, 0], class_1[:, 1], color='black', marker='x')
plt.show()
如果我们要对数据加以区分,怎么做呢?让我们增加一条直线,我们用数学公式y=x画出一条直线,构成我们的简单分类器;
查看代码
line_x = range(10)
line_y = line_x
plt.plot(line_x, line_y, color='black', linewidth=3)
plt.show()
二、逻辑回归分类器
逻辑回归虽然名字叫回归,但是其实是一种分类方法,常用于二分类。
逻辑回归利用Sigmoid函数做了分类转换,将结果转换成0和1两类,利用这个性质实现了分类的功能。
Sigmoid函数是一个S型的函数,当自变量z趋近正无穷时,因变量g(z)趋近于1,而当z趋近负无穷时,g(z)趋近于0,它能够将任何实数映射到(0,1)区间,使其可用于将任意值函数转换为更适合二分类的函数。
下面总结如何用python实现逻辑回归。
首先导入需要的包,包括numpy(计算),matplotlib(画图), sklearn(建模)
查看代码
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
from sklearn import datasets
from sklearn import linear_model
获取鸢尾花数据集(sklarn中自带数据集),指定特征x和目标y,查看数据的前10行
查看代码
iris = datasets.load_iris()
x = iris.data[:, :2]
y = iris.target
print('x前10行:\n', x[:10])
print('y前10行:\n', y[:10])
画图查看数据的分布情况,c=y表示使用颜色的顺序,用y中的不同个数来定义不同颜色的数量,这里y总共有3类,所以有3种不同的颜色。
查看代码
plt.figure()
plt.scatter(x[:, 0], x[:, 1], c=y)
plt.show()
初始化逻辑回归分类器,用sklearn中的LogisticRegression模型(简称LR)。其中的重要参数包括, solver 设置求解系统方程的算法类型, C表示正则化强度,值越小正则化强度越高
查看代码
clf = linear_model.LogisticRegression(solver='liblinear', C=1000)
训练分类器,直接用fit方法,传入特征x和目标y
查看代码
clf.fit(X, y)
画出数据的边界。首先定义图形的取值范围,通常是从最小值到最大值,增加了一些余量(buffer),如代码中最小值-1,最大值+1。
画边界的时候用到了网格(grid)数据求解方程的值,然后把边界画出来。
np.c_方法是按行连接两个矩阵,要求两个矩阵的行数相等。(扩展一下,同理,np.r_ 方法就是按列连接两个矩阵,要求两个矩阵的列数相等)
查看代码
x_min, x_max = min(X[:, 0]) - 1.0, max(X[:, 0]) + 1.0
y_min, y_max = min(X[:, 1]) - 1.0, max(X[:, 1]) + 1.0
print('x\_min:', x_min, 'x\_max:', x_max)
print('y\_