【机器学习】Exam3

线性可分logistic逻辑回归

数据集点被分为了两边,根据课程学会归一化函数以及梯度下降即可。

使用线性模型。

python 复制代码
import copy

import numpy as np
import pandas as pd
from matplotlib import pyplot as plt

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

# 计算损失
def compute_cost_logistic(X, y, w, b):
    m = X.shape[0]
    cost = 0.0
    for i in range(m):
        z_i = np.dot(X[i], w) + b
        f_wb_i = sigmoid(z_i)
        cost += -y[i] * np.log(f_wb_i) - (1 - y[i]) * np.log(1 - f_wb_i)
    cost = cost / m
    return cost
    
# 计算梯度逻辑
def compute_gradient_logistic(X, y, w, b):
    m, n = X.shape
    db_w = np.zeros(n)
    db_b = 0.
    for i in range(m):
        z_i = sigmoid(np.dot(X[i], w) + b)
        err_i = z_i - y[i]
        for j in range(n):
            db_w[j] += err_i * X[i][j]
        db_b += err_i
    return db_w / m, db_b / m

# 梯度下降
def gradient_descent(X, y, w, b, eta, num_iter):
    m = X.shape[0]
    for i in range(num_iter):
        w_temp = copy.deepcopy(w)
        b_temp = b
        db_w, db_b = compute_gradient_logistic(X, y, w_temp, b_temp)
        w = w_temp - eta * db_w
        b = b_temp - eta * db_b
        """
        if i == 0:
            print(compute_cost_logistic(X, y, w, b))
        """

    return w, b

if __name__ == '__main__':
    data = pd.read_csv(r'D:\BaiduNetdiskDownload\data_sets\ex2data1.txt')
    xx = data.iloc[:, 0:-1].to_numpy()
    data = (data - data.min()) / (data.max() - data.min())
	# 获取X,y训练集
    X_train = data.iloc[:, 0:-1]
    y_train = data.iloc[:, -1]

    X_train = X_train.to_numpy()
    y_train = y_train.to_numpy()

    w_tmp = np.zeros_like(X_train[0])
    b_tmp = 0.
    alph = 0.1
    iters = 10000
    w_out, b_out = gradient_descent(X_train, y_train, w_tmp, b_tmp, alph, iters)
    print(w_out, b_out)
    # 根据 w,b画出关于x的图表
    x = np.linspace(0, 1, 100)
    k = (-b_out - w_out[0] * x ) / w_out[1]

    X_air = xx[:, 0]
    Y_air = np.zeros(X_air.shape[0])
    plt.plot(x, k, color='blue')
    plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train)
    plt.show()

	# 计算准确率
    count = 0
    for i in range(X_train.shape[0]):
        ans = sigmoid(np.dot(X_train[i], w_out) + b_out)
        prediction = 1 if ans >= 0.5 else 0
        if(prediction == y_train[i]): count += 1
    print('Accuracy:{}'.format(count))
    print(f"\nupdated parameters: w:{w_out}, b:{b_out}")
一些图表

回归方程和数据集:

预期结果:

w: 9.24150506 8.78629869 b: -8.125896329768265

Accuracy:88%

相关推荐
“码”力全开3 小时前
解耦安防碎片化:基于 Docker 与边缘计算的 AI 视频中台架构设计(支持 GB28181/RTSP 与源码交付)
人工智能·docker·边缘计算
sali-tec3 小时前
C# 基于OpenCv的视觉工作流-章80-长短脚
图像处理·人工智能·opencv·算法·计算机视觉
AI科技星3 小时前
国家重点研发计划项目申报书
人工智能·线性代数·架构·概率论·学习方法
智联视频超融合平台3 小时前
AI赋能传统电厂:2025能源革命的智慧引擎
人工智能·能源
qcx233 小时前
【系统学AI】23 AI 时代产品运营与获客全景:CRM SaaS 大变局 + 增长新范式(2026 调研报告)
人工智能·产品运营·产品设计·ai agent·ai native
白狐_7983 小时前
从功能开发到开源维护:一个 Python 可视化项目的 Git 分支、维护文件与 PR 流程实践
git·python·开源
叶修_A3 小时前
【COZE-08】Prompt工程进阶 - 结构化输出与思维链
大数据·人工智能·prompt
John_ToDebug3 小时前
开源与人性:DeepSeek 战略的底层逻辑
人工智能·经验分享·ai
老吴胡编3 小时前
eknife 2026.05.28 v0.0.5 更新 —— 支持 PDF 文档合并
人工智能·嵌入式硬件·个人开发
俊哥工具3 小时前
不用打开文件也能预览!支持压缩包、PDF、音视频
python·智能手机·django·pdf·计算机外设·virtualenv