Datawhale开源教程学习——集成学习(task4分类问题)

Task04 分类问题

度量分类的指标

1、混淆矩阵

  • 真阳性TP:预测值和真实值都为正例;
  • 真阴性TN:预测值与真实值都为正例;
  • 假阳性FP:预测值为正,实际值为负;
  • 假阴性FN:预测值为负,实际值为正;

在这里插入图片描述

准确率(Accuracy)

分类正确的样本数占总样本的比例(真阳性和真阴性占总样本比例),即: A C C = T P + T N F P + F N + T P + T N ACC = \frac{TP+TN}{FP+FN+TP+TN} ACC=FP+FN+TP+TNTP+TN.

精度(Precision)

预测为正且分类正确的样本占预测值为正的比例(真阳性占预测为阳性的比例),即: P R E = T P T P + F P PRE = \frac{TP}{TP+FP} PRE=TP+FPTP.

召回率(Recall)

预测为正且分类正确的样本占类别为正的比例(真阳性占实际阳性的比例),即: R E C = T P T P + F N REC = \frac{TP}{TP+FN} REC=TP+FNTP.

F1值

综合衡量精度和召回率,即: F 1 = 2 P R E × R E C P R E + R E C F1 = 2\frac{PRE\times REC}{PRE + REC} F1=2PRE+RECPRE×REC.

ROC曲线

以假阳率为横轴,真阳率为纵轴画出来的曲线,曲线下方面积越大越好
在这里插入图片描述

AUC曲线

ROC与x轴之间的面积。

Q1:回归问题和分类问题的联系和区别,如何利用回归问题解决分类问题?

A1:
分类和回归的区别在于输出变量的类型。
连续变量预测称为回归,离散变量预测称为分类。
在回归问题中,因变量是连续性变量,我们需要预测 E ( Y ∣ X ) E(Y|X) E(YX)是一个连续的实数,但是在分类问题中,我们往往是通过已知X的信息预测Y的类别,往往是一个离散集合中的某个元素。如:是否患癌症,图片是猫还是狗等。一个很自然的想法是能否用线性回归去处理分类问题,

举个例子
预测明天的气温是多少度,这是一个回归任务;
预测明天是阴、晴还是雨,就是一个分类任务。

将回归的线性关系加一个激活函数(如sigmoid),转变为分类问题。

Q2:为什么分类问题的损失函数可以是交叉熵而不是均方误差?

Q4:从0推导svm

A4:

  • 支持向量机SVM:
    支持向量机SVM是20世纪90年代在计算机界发展起来的一种分类算法,在许多问题中都被证明有较好的效果,被认为是适应性最广的算法之一。
    在这里插入图片描述

    支持向量机的基本原理非常简单,如图所视,白色和蓝色的点各为一类,我们的目标是找到一个分割平面将两个类别分开。通常来说,如果数据本身是线性可分的,那么事实上存在无数个这样的超平面。这是因为给定一个分割平面稍微上移下移或旋转这个超平面,只要不接触这些观测点,仍然可以将数据分开。一个很自然的想法就是找到最大间隔超平面,即找到一个分割平面距离最近的观测点最远。下面我们来严格推导:
    我们根据距离超平米那最近的点,只要同时缩放w和b可以得到: w T x 1 + b = 1 w^Tx_1 + b = 1 wTx1+b=1 w T x 2 + b = − 1 w^Tx_2+b = -1 wTx2+b=1,因此:
    w T x 1 + b = 1 w T x 2 + b = − 1 ( w T x 1 + b ) − ( w T x 2 + b ) = 2 w T ( x 1 − x 2 ) = 2 w T ( x 1 − x 2 ) = ∥ w ∥ 2 ∥ x 1 − x 2 ∥ 2 cos ⁡ θ = 2 ∥ x 1 − x 2 ∥ 2 cos ⁡ θ = 2 ∥ w ∥ 2 d 1 = d 2 = ∥ x 1 − x 2 ∥ 2 cos ⁡ θ 2 = 2 ∥ w ∥ 2 2 = 1 ∥ w ∥ 2 d 1 + d 2 = 2 ∥ w ∥ 2 \begin{array}{l} w^{T} x_{1}+b=1 \\ w^{T} x_{2}+b=-1 \\ \left(w^{T} x_{1}+b\right)-\left(w^{T} x_{2}+b\right)=2 \\ w^{T}\left(x_{1}-x_{2}\right)=2 \\ \qquad \begin{array}{l} w^{T}\left(x_{1}-x_{2}\right)=\|w\|_{2}\left\|x_{1}-x_{2}\right\|_{2} \cos \theta=2 \\ \left\|x_{1}-x_{2}\right\|_{2} \cos \theta=\frac{2}{\|w\|_{2}} \end{array} \\ \qquad \begin{array}{l} d_{1}=d_{2}=\frac{\left\|x_{1}-x_{2}\right\|_{2} \cos \theta}{2}=\frac{\frac{2}{\|w\|_{2}}}{2}=\frac{1}{\|w\|_{2}} \\ d_{1}+d_{2}=\frac{2}{\|w\|_{2}} \end{array} \end{array} wTx1+b=1wTx2+b=1(wTx1+b)(wTx2+b)=2wT(x1x2)=2wT(x1x2)=w2x1x22cosθ=2x1x22cosθ=w22d1=d2=2x1x22cosθ=2w22=w21d1+d2=w22
    由此可知道SVM模型的具体形式:
    min ⁡ w , b 1 2 ∥ w ∥ 2  s.t.  y ( i ) ( w T x ( i ) + b ) ≥ 1 , i = 1 , … , n \begin{aligned} \min _{w, b} & \frac{1}{2}\|w\|^{2} \\ \text { s.t. } & y^{(i)}\left(w^{T} x^{(i)}+b\right) \geq 1, \quad i=1, \ldots, n \end{aligned} w,bmin s.t. 21w2y(i)(wTx(i)+b)1,i=1,,n
    可以将约束条件写为: $g_{i}(w)=-y{(i)}\left(w{T} x^{(i)}+b\right)+1 \leq 0 $
    可以将优化问题拉格朗日化
    L ( w , b , α ) = 1 2 ∥ w ∥ 2 − ∑ i = 1 n α i [ y ( i ) ( w T x ( i ) + b ) − 1 ] \mathcal{L}(w, b, \alpha)=\frac{1}{2}\|w\|^{2}-\sum_{i=1}^{n} \alpha_{i}\left[y^{(i)}\left(w^{T} x^{(i)}+b\right)-1\right] L(w,b,α)=21w2i=1nαi[y(i)(wTx(i)+b)1]
    因此:
    L ( w , b , α ) = 1 2 ∥ w ∥ 2 − ∑ i = 1 n α i [ y ( i ) ( w T x ( i ) + b ) − 1 ] \mathcal{L}(w, b, \alpha)=\frac{1}{2}\|w\|^{2}-\sum_{i=1}^{n} \alpha_{i}\left[y^{(i)}\left(w^{T} x^{(i)}+b\right)-1\right] L(w,b,α)=21w2i=1nαi[y(i)(wTx(i)+b)1]
    欲构造 dual 问题, 首先求拉格朗日化的问题中 $\mathrm{w} $ 和 $\mathrm{b} $ 的值, 对 $ \mathrm{w}$ 求梯度, 令梯度为 0, 可求得 w:
    对 b 求梯度, 令梯度为 0, 可得:
    ∂ ∂ b L ( w , b , α ) = ∑ i = 1 n α i y ( i ) = 0 \frac{\partial}{\partial b} \mathcal{L}(w, b, \alpha)=\sum_{i=1}^{n} \alpha_{i} y^{(i)}=0 bL(w,b,α)=i=1nαiy(i)=0

    w \mathrm{w} w 带入拉格朗日化的原问题可得
    L ( w , b , α ) = ∑ i = 1 n α i − 1 2 ∑ i , j = 1 n y ( i ) y ( j ) α i α j ( x ( i ) ) T x ( j ) − b ∑ i = 1 n α i y ( i ) L ( w , b , α ) = ∑ i = 1 n α i − 1 2 ∑ i , j = 1 n y ( i ) y ( j ) α i α j ( x ( i ) ) T x ( j ) \begin{array}{l} \mathcal{L}(w, b, \alpha)=\sum_{i=1}^{n} \alpha_{i}-\frac{1}{2} \sum_{i, j=1}^{n} y^{(i)} y^{(j)} \alpha_{i} \alpha_{j}\left(x^{(i)}\right)^{T} x^{(j)}-b \sum_{i=1}^{n} \alpha_{i} y^{(i)} \\ \mathcal{L}(w, b, \alpha)=\sum_{i=1}^{n} \alpha_{i}-\frac{1}{2} \sum_{i, j=1}^{n} y^{(i)} y^{(j)} \alpha_{i} \alpha_{j}\left(x^{(i)}\right)^{T} x^{(j)} \end{array} L(w,b,α)=i=1nαi21i,j=1ny(i)y(j)αiαj(x(i))Tx(j)bi=1nαiy(i)L(w,b,α)=i=1nαi21i,j=1ny(i)y(j)αiαj(x(i))Tx(j)
    因此:
     对拉格朗日化的原问题求最小值, 得到了  w  , 现在可以构造 dual 问題  max ⁡ α W ( α ) = ∑ i = 1 n α i − 1 2 ∑ i , j = 1 n y ( i ) y ( j ) α i α j ⟨ x ( i ) , x ( j ) ⟩  s.t.  α i ≥ 0 , i = 1 , … , n ∑ i = 1 n α i y ( i ) = 0  可以推导出 b的值为:  b ∗ = − max ⁡ i : y ( i ) = − 1 w ∗ T x ( i ) + min ⁡ i : y ( i ) = 1 w ∗ T x ( i ) 2  SVM的决策子如下,值的符号为类别.  w T x + b = ( ∑ i = 1 n α i y ( i ) x ( i ) ) T x + b = ∑ i = 1 n α i y ( i ) ⟨ x ( i ) , x ⟩ + b \begin{aligned} &\text { 对拉格朗日化的原问题求最小值, 得到了 } \mathrm{w} \text { , 现在可以构造 dual 问題 }\\ &\begin{aligned} \max _{\alpha} & W(\alpha)=\sum_{i=1}^{n} \alpha_{i}-\frac{1}{2} \sum_{i, j=1}^{n} y^{(i)} y^{(j)} \alpha_{i} \alpha_{j}\left\langle x^{(i)}, x^{(j)}\right\rangle \\ \text { s.t. } & \alpha_{i} \geq 0, \quad i=1, \ldots, n \\ & \sum_{i=1}^{n} \alpha_{i} y^{(i)}=0 \end{aligned}\\ &\text { 可以推导出 b的值为: } b^{*}=-\frac{\max _{i: y^{(i)}=-1} w^{* T} x^{(i)}+\min _{i: y^{(i)}=1} w^{* T} x^{(i)}}{2}\\ &\begin{array}{r} \text { SVM的决策子如下,值的符号为类别. } \\ \qquad w^{T} x+b=\left(\sum_{i=1}^{n} \alpha_{i} y^{(i)} x^{(i)}\right)^{T} x+b=\sum_{i=1}^{n} \alpha_{i} y^{(i)}\left\langle x^{(i)}, x\right\rangle+b \end{array} \end{aligned}  对拉格朗日化的原问题求最小值得到了 w , 现在可以构造 dual 问題 αmax s.t. W(α)=i=1nαi21i,j=1ny(i)y(j)αiαjx(i),x(j)αi0,i=1,,ni=1nαiy(i)=0 可以推导出 b的值为b=2maxi:y(i)=1wTx(i)+mini:y(i)=1wTx(i) SVM的决策子如下,值的符号为类别wTx+b=(i=1nαiy(i)x(i))Tx+b=i=1nαiy(i)x(i),x+b

Q6:python+numpy实现逻辑回归

A6:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import scipy
df = pd.read_csv('./ex2data1.txt')
m = len(df)  # 数据总数
pos = df[(df['y'] == 1)]
neg = df[(df['y'] == 0)]
x = np.mat(df.iloc[:, 0:-1])
y = np.mat(df.iloc[:, -1]).T  # m*1 mat
X = np.hstack((np.ones((m, 1)), x))  # m*n mat
#theta = np.zeros((X.shape[1], 1))  # n*1 mat
theta=np.array([0,0,0]).reshape(3,1)
cost_history = []
def sigmoid(x):
    return 1.0 / (1 + np.exp(-x))

def J(theta,X,y,mylambda=0):
    theta=theta.reshape(3,1)
    #print(theta.shape,X.shape,y.shape)
    return -1*float((y.T*np.log(h(X,theta))+(1-y.T)*np.log(1-h(X,theta)))/m)+float(theta.T.dot(theta))*mylambda/(2*m)

def h(X,theta):
    return sigmoid(X.dot(theta))

from scipy import optimize

def opt():
    global theta
    result = optimize.fmin(J, x0=theta, args=(X, y,0.), maxiter=400, full_output=True)
    theta=result[0]
    print(theta)
def plot():
        fig = plt.figure()

        plt.plot(pos.iloc[:, 0], pos.iloc[:, 1], 'k+', label='pos')
        plt.plot(neg.iloc[:, 0], neg.iloc[:, 1], 'yo', label='neg')
        # 画边界
        x0 = [float(df.x0.min()), float(df.x0.max())]
        x1 = [float(-1*theta[0]/theta[2] -
                    theta[1]/theta[2]*each) for each in x0]
        plt.plot(x0, x1)
        plt.grid(True)
        plt.show()
opt()
plot()

参考

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值