机器学习编程作业-逻辑回归

作业说明

任务一:使用逻辑回归辨别真假钞票。钞票数据集(Banknote Dataset)涉及根据给定钞票的数个度量的照片预测是真钞还是假钞。它是一个二分类问题。每个类的观测值数量不均等。4个输入变量和1个输出变量。变量名如下:
变量名1:小波变换图像(连续)
变量名2:小波偏斜变换图像(连续)
变量名3:小波峰度变换图像(连续)
变量名4:图像熵(连续)。
类(0 为真钞,1 为假钞)

任务二:使用逻辑回归对电影评论分类。电影评论数据集和之前贝叶斯的电影数据集相同。

复习

逻辑回归,在西瓜书里面称为对数几率回归,logistic regression,logit regression。实际上就是线性回归加了一个sigmoid函数。
z = w T x + b z=\mathbf{w} ^{T} \mathbf{x}+b z=wTx+b
y = s i g m o i d ( z ) = 1 1 + e − z = 1 1 + e − ( w T x + b ) y=sigmoid(z)=\frac{1}{1+e^{-z }}=\frac{1}{1+e^{-(\mathbf{w} ^{T} \mathbf{x}+b )}} y=sigmoid(z)=1+ez1=1+e(wTx+b)1

任务一:使用逻辑回归辨别真假钞票

首先是从txt文件中读取数据并向量化。然后用梯度下降法不断迭代得到最优参数。上代码

def gradient(x, xt, y):
    m, n = x.shape
    y = y.reshape(-1, 1)
    alpha = 0.001
    deta = 0.000001
    maxcycle = 500
    beta = np.ones((n, 1))
    for i in range(maxcycle):
        h = sigmoid(np.matmul(x, beta))
        error = y - h
        tem = beta
        beta = beta + alpha * np.matmul(xt, error)
        if abs(sum(beta - tem)) < deta:
            break
        print(i)
    return beta

beta就是 w w w b b b的拼接结果,即 β = ( w ; b ) \beta =(\mathbf{w};b) β=(w;b), w T x + b = β T x ^ , x ^ = ( x ; 1 ) \mathbf{w} ^{T} \mathbf{x}+b=\beta^{T}\mathbf{\hat{x}},\mathbf{\hat{x}}=(\mathbf{x};1) wTx+b=βTx^,x^=(x;1)。这个代码写的不太行,对numpy库非常不熟悉,导致我函数入口参数既传了矩阵又传了矩阵的转置,而且运行慢
剩下的就是用公式去预测结果然后保存成csv文件

任务二:使用逻辑回归对电影评论分类

在这里有一个问题,就是梯度下降法的实现。走在路上想往最低处走总有多种路线。任务一就是一种梯度下降,但是很慢,效果感觉也不太行。我记得当时我编程作业到这里时处于一种非常迷惑的状态,因为连续好几个任务都不给测试集标签对比训练成果(后来才想起可以把训练集割掉一部分不训练,专门拿来验证)。
看看别人的梯度下降,多简洁

def stoc_grad_ascent(dataMatIn, classLabels):
    m, n = np.shape(dataMatIn)
    alpha = 0.01
    weights = np.ones(n)
    for i in range(m):
        h = sigmoid(sum(dataMatIn[i] * weights))  # 数值计算
        error = classLabels[i] - h
        weights = weights + alpha * error * dataMatIn[i]
        print(i)
    return weights

水完了,今晚上不写了,凑合着看

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值