首页 > 编程语言 >梯度上升算法

梯度上升算法

时间:2023-09-05 18:33:40浏览次数:44  
标签:plt 梯度 样本 dataArr 算法 weights np 上升 data

用梯度上升算法进行Logistic回归

$w=w+\nabla{f(w)}$

对应代码如下

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


data_1, labels = make_classification(n_samples=400, n_features=2, n_informative=2,n_redundant=0,n_repeated=0, n_classes=2, random_state=42)
data_0 = np.ones((400, 1))
data = np.hstack((data_0, data_1))


def sigmoid(inX):
    sig = 1 / (1 + np.exp(-inX))
    return sig


def grad_ascent():
    datamat = np.mat(data)
    labelsmat = np.mat(labels).transpose()
    m, n = np.shape(datamat)
    weights = np.ones((n, 1))  # 初始化weight
    alpha = 0.001
    iters = 100
    for i in range(iters):
        h = sigmoid(datamat * weights)
        error = labelsmat - h
        weights = weights + alpha * datamat.transpose() * error

    return weights


def plotBestFit(weights):  # 加载数据集
    dataArr = np.array(data)  # 转换成numpy的array数组
    n = np.shape(dataArr)[0]  # 数据个数
    xcord1 = []
    ycord1 = []  # 正样本
    xcord2 = []
    ycord2 = []  # 负样本
    for i in range(n):  # 根据数据集标签进行分类
        if int(labels[i]) == 1:
            xcord1.append(dataArr[i, 1])
            ycord1.append(dataArr[i, 2])  # 1为正样本
        else:
            xcord2.append(dataArr[i, 1])
            ycord2.append(dataArr[i, 2])  # 0为负样本
    fig = plt.figure()
    ax = fig.add_subplot(111)
    ax.scatter(xcord1, ycord1, s=30, c='red', marker='s')  # 绘制正样本
    ax.scatter(xcord2, ycord2, s=30, c='green')  # 绘制负样本
    x = np.arange(-2.0, 2.0, 0.01)  # x区间
    y = (-weights[0] - weights[1] * x) / weights[2]  # 最佳拟合直线
    plt.axis([-4, 4, -4, 4])
    ax.plot(x, np.ravel(y))
    plt.title('BestFit')  # 标题
    plt.xlabel('X1')
    plt.ylabel('X2')  # x,y轴的标签
    plt.show()


if __name__ == '__main__':
    plotBestFit(grad_ascent())

标签:plt,梯度,样本,dataArr,算法,weights,np,上升,data
From: https://blog.51cto.com/u_16248600/7378095

相关文章

  • 随机森林算法如何用代码实现
    随机森林是一种集成学习算法,通过组合多个决策树来进行分类和回归任务,从而提高预测的稳定性和准确性。以下是使用Python中的sklearn库实现随机森林算法的基本示例:fromsklearn.datasetsimportload_irisfromsklearn.model_selectionimporttrain_test_splitfromsklearn.ensemb......
  • 深度神经网络中基于卷积操作的自适应学习算法研究
    本文提出了一种基于卷积操作的自适应学习算法,用于深度神经网络中。该算法通过引入复杂的数学公式和高阶张量操作,实现了对复杂模式的准确建模和学习。我们通过对网络架构的改进和参数的优化,提高了模型的泛化能力和性能表现。实验结果表明,我们的算法在多个基准数据集上取得了优于现有......
  • 遗传算法
     遗传算法(GeneticAlgorithm)是一种基于自然选择原理和自然遗传机制的启发式搜索算法。该算法通过模拟自然界中生物遗传进化的自然机制(选择、交叉和变异操作),将好的遗传基因(最优目标)不断遗传给子代,使得后代产生最优解的概率增加示例代码如下:#导入所需的库importrandomimportmat......
  • 9.5-铲机什么时候加-限位柱的算法
      ......
  • 【Leetcode刷题记录】各种排序算法
    前言:这篇文章总结一下学习的几种排序算法,假设要对一个vector<int>数组进行降序排序,数组中一共有n个数。1、冒泡排序思想:冒泡排序的思想就是一共进行n-1次循环,每次循环把范围内最小的数冒到最后面。因此用内为双循环,外循环为冒泡的次数,内循环为每次冒泡的范围,通过比较和......
  • C++ 算法竞赛、01 周赛篇 | AcWing 第1场周赛
    AcWing第1场周赛竞赛-AcWing3577选择数字3577.选择数字-AcWing题库朴素暴力两层循环#include<cstdio>#include<iostream>#include<unordered_set>usingnamespacestd;constintN=101;inta[N],b[N];intmain(){intn,m;cin>>n;......
  • 算法题笔记
    数组常用STL和遍历//1.常用STLnums.size();//返回数组元素数量nums.begin();nums.end();sort(A.begin(),A.end());//快速排序//2.遍历intsize=nums.size();for(inti=0;i<size;i++){}二分查找intleft=0;intright=nums.size()-1;//定义targe......
  • 【算法】斐波那契数列与台风的故事
    在小岛的一个海滨小镇上,住着一个名叫苏菲的女孩。苏菲一家人靠海为生,她的生活简单而朴素,与大自然和谐共生。每天,苏菲都会来到海边,欣赏那美丽的日出和日落,感受着大海的呼吸。然而,小岛的美丽风光并非一成不变。每年夏季,热带气旋活跃,台风频繁登陆,给小岛带来了严重的危害。有一天,苏......
  • 算法时间复杂度和空间复杂度简介
    评估算法的核心指标1时间复杂度2空间复杂度 空间复杂度就是算法解决一个问题时额外占用的内存空间是多大时间复杂度就是算法解决一个问题时数据量和运行时间的关系 一般我们评判算法的优劣首先考虑的就是时间复杂度。 时间复杂度什么是常数时间操作?执行时间固定的......
  • 基于遗传算法的排课系统
    系统使用技术:SSH前端技术:css、js等开发工具:eclipse数据库:mysql5.7项目介绍:系统框架采用SSH,前端使用css、js等,适合基础中等或以下,做排课系统的同学。系统主要分为三个角色:管理员、教师、学生,主要功能包括:专业信息管理、班级信息管理、教室信息管理、课程信息管理、教师信息管理、自......