• 大小: 5.73KB
    文件类型: .py
    金币: 1
    下载: 0 次
    发布日期: 2024-05-09
  • 语言: Python
  • 标签: python  逻辑回归  

资源简介

python实现逻辑回归,牛顿法,梯度上升法,对西瓜数据集和鸢鸟花数据集进行学习,正确率可达100%。

资源截图

代码片段和文件信息

import numpy as np
from sklearn.model_selection import train_test_split


# sigmoid函数
def sigmoid(x):
    return 1.0 / (1 + np.exp(-x))


# 关于beta的高阶可导连续凸函数(书上式3.27)
def beta_function(x y beta):
    sum = 0
    m = np.shape(x)[0]
    for i in range(m):
        sum = sum - y[i] * np.dot(beta x[i].T) + np.log(1 + np.exp(np.dot(beta x[i].T)))
    return sum


# 关于beta的一阶导数
def first_derivative_beta(x y beta):
    m n = np.shape(x)
    sum = 0
    for i in range(m):
        temp = np.math.exp(np.dot(beta x[i].T))
        p1 = temp/(1+temp)
        sum = sum + x[i] * (y[i] - p1)
    return -sum


# 关于beta的二阶导数
def second_derivative_beta(x y beta):
    m n = np.shape(x)
    sum = 0
    for i in range(m):
        temp = np.math.exp(np.dot(beta x[i].T))
        p1 = temp / (1 + temp)
        sum = sum + np.dot(x[i] x[i].T) * p1 * (1 - p1)
    return sum


# 牛顿法迭代
def newton(x y beta0 accuracy iteration):
    for i in range(iteration):
        beta_before = beta0
        # beta0 = beta0 - solve(second_derivative_beta(x y beta0) first_derivative_beta(x y beta0))
        beta0 = beta0 - first_derivative_beta(x y beta0) / second_derivative_beta(x y beta0)
        if np.dot((beta0 - beta_before) (beta0 - beta_before).T) < accuracy:
            break
        else:
            continue
        #print(beta0)
    return beta0


# 梯度上升优化算法
def gradAscent(dataMatIn classLabels):
    dataMatrix = np.mat(dataMatIn)
    labelMat = np.mat(classLabels).transpose()
    m n = np.shape(dataMatrix)
    alpha = 0.001
    maxCycles = 500
    weights = np.ones((n 1))
    for k in range(maxCycles):
        h = sigmoid(dataMatrix * weights)
        error = (labelMat - h)
        weights = weights + alpha * dataMatrix.transpose() * error
    return weights

def main():
    data = np.array([[0.697 0.460 1]
                     [0.774 0.376 1]
                     [0.634 0.264 1]
                     [0.608 0.318 1]
                     [0.556 0.215 1]
                     [0.403 0.237 1]
                     [0.481 0.149 1]
                     [0.437 0.211 1]
                     [0.666 0.091 0]
                     [0.243 0.267 0]
                     [0.245 0.057 0]
                     [0.343 0.099 0]
                     [0.639 0.161 0]
                     [0.657 0.198 0]
                     [0.360 0.370 0]
                     [0.593 0.042 0]
                     [0.719 0.103 0]])

    # 训练集的属性
    xtrain0 = np.hstack((data[: 0:2] np.ones((17 1))))
    # 训练集的样本标签
    ytrain0 = data[: 2]

  

评论

共有 条评论