机器学习训练营(一): 基于逻辑回归的分类预测


接下来进入正文

一、逻辑回归介绍及应用

1.1 Sigmoid函数

S ( t ) = 1 1 + e − t S(t)=\frac{1}{1+e^{-t}} S(t)=1+et1

函数图像如下:
在这里插入图片描述从函数图像可以看出对任意的 t t t, S S S的取值范围都在 [ 0 , 1 ] [0,1] [0,1]之间,当 t > = 0 t>=0 t>=0时, S > = 0.5 S>=0.5 S>=0.5,可分类为 1 1 1;当 t < 0 t<0 t<0时, S < 0.5 S<0.5 S<0.5,可分类为 0 0 0

1.2 逻辑回归介绍

我们都知道线性回归 y = k x + b y=kx+b y=kx+b ,在此基础上,通过Sigmoid函数 L L L y y y 映射到 S = L ( k x + b ) S=L(kx+b) S=L(kx+b), 通过设定阈值 S ′ S' S,对于 S > S ′ S>S' S>S的可以分类为正样本,对于 S < S ′ S<S' S<S的分类为负样本,即可实现样本的二分类。对于多分类问题,可以采用多次二分类的方法实现多分类。

1.3 逻辑回归应用

预测是否发生、发生的概率(流失、客户响应等预测):根据logistic回归模型,预测在不同的自变量情况下,发生某病或某种情况的概率有多大。

影响因素、危险因素分析(找出影响结果的主要因素): 主要在流行病学中应用较多,比较常用的情形是探索某疾病的危险因素,也即影响因素分析。包括从多个可疑影响因素中筛选出具有显著影响的因素变量,还包括仅考察某单一因素是否为影响某一事件发生与否的因素。

判别、分类:实际上跟预测有些类似,也是根据logistic模型,判断某人属于某病或属于某种情况的概率有多大,也就是看一下这个人有多大的可能性是属于某病。

1.4 逻辑回归模型的优劣势

优点 :易于理解和实现;计算代价不高,速度很快,存储资源低;
缺点:容易欠拟合,分类精度可能不高

二、算法实践

Step1:库函数导入

##基础函数库
import numpy as np 
import matplotlib.pyplot as plt ##导入画图库
import seaborn as sns #基于matplotlib的图形可视化python包
from sklearn.linear_model import LogisticRegression ##导入逻辑回归模型函数

Step2:样本集构造和模型训练

## 构造2行6列的矩阵
x_features = np.array([[-1, -2], [-2, -1], [-3, -2], [1, 3], [2, 1], [3, 2]])
y_label = np.array([0, 0, 0, 1, 1, 1])#6行的label
## 调用逻辑回归模型
lr_clf = LogisticRegression()
## 用逻辑回归模型拟合构造的数据集
lr_clf = lr_clf.fit(x_features, y_label) #其拟合方程为 y=w0+w1*x1+w2*x2

Step3:模型参数查看

## 查看其对应模型的w1和w2
print('the weight of Logistic Regression:',lr_clf.coef_)
## 查看其对应模型的w0
print('the intercept(w0) of Logistic Regression:',lr_clf.intercept_)

输出为:模型参数

Step4:数据和模型可视化

#可视化
#画样本点
plt.figure()
plt.scatter(x_fearures[:,0],x_fearures[:,1], c=y_label, s=50, cmap='viridis')
#c=y_label表示以y_label分别展示不同的颜色,s表示散点的大小,marker='x'可更改标记的类型
plt.title('Dataset');
plt.xlabel('x_features');#x_轴标题
plt.ylabel('y_label');#y轴标题
#可视化决策边界
nx, ny = 200, 100;
x_min, x_max = plt.xlim()#获取x轴的最小和最大值
y_min, y_max = plt.ylim()
x_grid, y_grid = np.meshgrid(np.linspace(x_min, x_max, nx),np.linspace(y_min, y_max, ny))#x轴分成200等份,y轴分成100等份,生成网格矩阵
z_proba = lr_clf.predict_proba(np.c_[x_grid.ravel(), y_grid.ravel()])#ravel()扁平化,np.c_按行连接两个矩阵,predict_proba注意和predict的区别
z_proba = z_proba[:, 1].reshape(x_grid.shape)#行列转值
plt.contour(x_grid, y_grid, z_proba, [0.5], linewidths=2., colors='blue')#z_proba为(x_grid,y_grid)的高度值,绘制轮廓线,[0.7]轮廓线的位置
#新增样本点
## new point 1
x_fearures_new1 = np.array([[0, -1]])#生成新样本点1
plt.scatter(x_fearures_new1[:,0],x_fearures_new1[:,1], s=50, cmap='viridis')#对新样本点1可视化
plt.annotate(s='New point 1',xy=(0,-1),xytext=(-2,0),color='blue',arrowprops=dict(arrowstyle='-|>',connectionstyle='arc3',color='red'))
## new point 2
x_fearures_new2 = np.array([[1, 2]])
plt.scatter(x_fearures_new2[:,0],x_fearures_new2[:,1], s=50, cmap='viridis')
plt.annotate(s='New point 2',xy=(1,2),xytext=(-1.5,2.5),color='red',arrowprops=dict(arrowstyle='-|>',connectionstyle='arc3',color='red'))
plt.show()

在这里插入图片描述

Step5:模型预测

## 在训练集和测试集上分别利用训练好的模型进行预测
y_label_new1_predict = lr_clf.predict(x_fearures_new1)
y_label_new2_predict = lr_clf.predict(x_fearures_new2)
## 由于逻辑回归模型是概率预测模型(前文介绍的 p = p(y=1|x,\theta)),所以我们可以利用 predict_proba 函数预测其概率
y_label_new1_predict_proba = lr_clf.predict_proba(x_fearures_new1)
y_label_new2_predict_proba = lr_clf.predict_proba(x_fearures_new2)

print 'The New point 1 predict Probability of each class:',y_label_new1_predict_proba
print 'The New point 2 predict Probability of each class:',y_label_new2_predict_proba

输出为:
在这里插入图片描述
可以发现训练好的回归模型将X_new1预测为了类别0(判别面左下侧),X_new2预测为了类别1(判别面右上侧)。其训练得到的逻辑回归模型的概率为0.5的判别面为上图中蓝色的线。

链接:
1、Logistic回归主要应用领域

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值