Python实现机器学习算法:逻辑回归

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets.samples_generator import make_classification

def initialize_params(dims):
    w = np.zeros((dims, 1))
    b = 0
    return w, b

def sigmoid(x):
    z = 1 / (1 + np.exp(-x))
    return z

def logistic(X, y, w, b):
    num_train = X.shape[0]
    y_hat = sigmoid(np.dot(X, w) + b)
    loss = -1 / num_train * np.sum(y * np.log(y_hat) + (1-y) * np.log(1-y_hat))
    cost = -1 / num_train * np.sum(y * np.log(y_hat) + (1 - y) * np.log(1 - y_hat))
    dw = np.dot(X.T, (y_hat - y)) / num_train
    db = np.sum(y_hat - y) / num_train
    return y_hat, cost, dw, db

def linear_train(X, y, learning_rate, epochs):
    # 参数初始化
    w, b = initialize_params(X.shape[1])

    loss_list = []
    for i in range(epochs):
        # 计算当前的预测值、损失和梯度
        y_hat, loss, dw, db = logistic(X, y, w, b)
        loss_list.append(loss)

        # 基于梯度下降的参数更新
        w += -learning_rate * dw
        b += -learning_rate * db

        # 打印迭代次数和损失
        if i % 10000 == 0:
            print("epoch %d loss %f" % (i, loss))

        # 保存参数
        params = {
            'w': w,
            'b': b
        }

        # 保存梯度
        grads = {
            'dw': dw,
            'db': db
        }

    return loss_list, loss, params, grads

def predict(X, params):
    w = params['w']
    b = params['b']
    y_pred = sigmoid(np.dot(X, w) + b)
    return y_pred

if __name__ == "__main__":
    # 生成数据
    X, labels = make_classification(n_samples=100,
                                    n_features=2,
                                    n_informative=2,
                                    n_redundant=0,
                                    random_state=1,
                                    n_clusters_per_class=2)
    print(X.shape)
    print(labels.shape)

    # 生成伪随机数
    rng = np.random.RandomState(2)
    X += 2 * rng.uniform(size=X.shape)

    # 划分训练集和测试集
    offset = int(X.shape[0] * 0.9)
    X_train, y_train = X[:offset], labels[:offset]
    X_test, y_test = X[offset:], labels[offset:]
    y_train = y_train.reshape((-1, 1))
    y_test = y_test.reshape((-1, 1))
    print('X_train=', X_train.shape)
    print('y_train=', y_train.shape)
    print('X_test=', X_test.shape)
    print('y_test=', y_test.shape)

    # 训练
    loss_list, loss, params, grads = linear_train(X_train, y_train, 0.01, 100000)
    print(params)

    # 预测
    y_pred = predict(X_test, params)
    print(y_pred[:10])

原文地址:https://www.cnblogs.com/chenxiangzhen/p/10395231.html

时间: 2024-10-07 17:18:17

Python实现机器学习算法:逻辑回归的相关文章

机器学习算法 --- 逻辑回归及梯度下降

一.逻辑回归简介 logistic回归又称logistic回归分析,是一种广义的线性回归分析模型,常用于数据挖掘,疾病自动诊断,经济预测等领域. logistic回归是一种广义线性回归(generalized linear model),因此与多重线性回归分析有很多相同之处. 其公式如下: 其图像如下: 我们通过观察上面的图像可以发现,逻辑回归的值域为(0, 1),当输入为0时,其输出为0.5:当输入小于0,并且越来越小时,其输出越来越接近于0:相反的,当其输入大于0,并且越来越大时,其输出越来

机器学习实战-逻辑回归

什么是回归? 假设现在有些数据点,我用直线对这些点进行拟合(该线叫做最佳拟合直线),这个拟合的过程就叫做回归. Logistic回归? 这里,Logistic回归进行分类的主要思想:根据现有数据对分类的边界线建立回归公式,以此边界线进行分类.这里的回归指的是最佳拟合,就是要找到边界线的回归公式的最佳拟合的参数集.训练时使用最优化算法寻找最佳拟合参数. 基于Logistic回归和Sigmoid函数的分类 对于边界线建立的回归函数,能够接受所有的输入然后预测出类别.例如,对于二分类的情况下,上述函数

4.机器学习之逻辑回归算法

理论上讲线性回归模型既可以用于回归,也可以用于分类.解决回归问题,可以用于连续目标值的预测.但是针对分类问题,该方法则有点不适应,因为线性回归的输出值是不确定范围的,无法很好的一一对应到我们的若干分类中.即便是一个二分类,线性回归+阈值的方式,已经很难完成一个鲁棒性很好的分类器了.为了更好的实现分类,逻辑回归诞生了.逻辑回归(Logistic Regression)主要解决二分类问题,用来表示某件事情发生的可能性.逻辑回归是假设数据服从Bernoulli分布的,因此LR也属于参数模型,他的目的也

【机器学习笔记四】分类算法 - 逻辑回归

参考资料 [1]    Spark MLlib 机器学习实践 [2]    统计学习方法 1.Logistic分布 设X是连续随机变量,X服从Logistic分布是指X具有下列分布函数和密度函数 ,.其中u为位置参数,γ为形状参数.如下图: 分布函数以(u,1/2)为中心对称,满足:,其中形状参数γ越小,中心部分增加越快. 2.Logistic回归模型 二项logistic回归模型是一种分类模型,由条件概率P(Y|X)表示,这里随机变量X取实数,而Y取0或者1.定义: 和 Logistic回归比

机器学习入门-逻辑回归算法

梯度下降: 对theta1, theta2, theta3 分别求最快梯度下降的方向,然后根据给定的学习率,进行theta1, theta2, theta3的参数跟新 假定目标函数 J(theta) = 1/2m * np.sum(h(theta) - y)^2 / len(X) 梯度下降的策略分为3种, 批量梯度下降: 每次迭代输入全部的数据, 效果好,但耗时 随机梯度下降: 每次输入一个样本,时间快,迭代效果差 小批量梯度下降:每次输入部分数据,效果好,时间适中,一般都是16, 32, 64

机器学习:逻辑回归

************************************** 注:本系列博客是博主学习Stanford大学 Andrew Ng 教授的<机器学习>课程笔记.博主深感学过课程后,不进行总结很容易遗忘,根据课程加上自己对不明白问题的补充遂有此系列博客.本系列博客包括线性回归.逻辑回归.神经网络.机器学习的应用和系统设计.支持向量机.聚类.将维.异常检测.推荐系统及大规模机器学习等内容. ************************************** 逻辑回归 分类(C

机器学习二 逻辑回归作业

作业在这,http://speech.ee.ntu.edu.tw/~tlkagk/courses/ML_2016/Lecture/hw2.pdf 是区分spam的. 57维特征,2分类问题.采用逻辑回归方法.但是上述数据集在kaggle中没法下载,于是只能用替代的方法了,下了breast-cancer-wisconsin数据集. 链接在这http://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin

机器学习 (三) 逻辑回归 Logistic Regression

文章内容均来自斯坦福大学的Andrew Ng教授讲解的Machine Learning课程,本文是针对该课程的个人学习笔记,如有疏漏,请以原课程所讲述内容为准.感谢博主Rachel Zhang 的个人笔记,为我做个人学习笔记提供了很好的参考和榜样. § 3.  逻辑回归 Logistic Regression 1 分类Classification 首先引入了分类问题的概念——在分类(Classification)问题中,所需要预测的$y$是离散值.例如判断一封邮件是否属于垃圾邮件.判断一个在线交

机器学习:逻辑回归(基础理解)

逻辑回归(Logistic Regression) 一.行业算法应用率 具统计,2017年,除了军事和安全领域,逻辑回归算法是在其它所有行业使用最多了一种机器学习算法: Logistic Regression(逻辑回归) Decision Trees(决策树) Random Forests(随机森林) Neural Networks(人工神经网络 NNs)--深度学习算法 人工神经网络(Artificial Neural Networks,简写为ANNs)也简称为神经网络(NNs)或称作连接模型

机器学习:逻辑回归(使用多项式特征)

一.基础 逻辑回归中的决策边界,本质上相当于在特征平面中找一条直线,用这条直线分割所有的样本对应的分类: 逻辑回归只可以解决二分类问题(包含线性和非线性问题),因此其决策边界只可以将特征平面分为两部分: 问题:使用直线分类太过简单,因为有很多情况样本的分类的决策边界并不是一条直线,如下图:因为这些样本点的分布是非线性的: 方案:引入多项式项,改变特征,进而更改样本的分布状态: 二.具体实现 1)模拟数据集 import numpy as np import matplotlib.pyplot a