机器学习-逻辑回归算法推理+代码复现

几种机器学习算法的原理、推导和代码实现 一、基算法 1、决策树(Decision Tree) (1)原理:决策树根据样本数据集的数据特征对数据集进行划分,直到针对所有特征都划分过,或者划分的数据子集的所有数据的类别标签相同。 (2)推导: (3)代码实现: from sklearn.datasets import load_iris from sklearn.datasets import load_iris from sklearn ... 阅读详情

1、算法推理:

这里算法推理和代码复现原型参考:https://blog.youkuaiyun.com/zouxy09/article/details/20319673

2、算法应用背景-课题设计:

企业财务风险预警是企业风险预警系统的一个重要组成部分,它能有效的预知部分财务风险。本课题将风险公司记为ST,非风险公司记为非ST,ST判断标准如下:

1.)连续两年年报显示净利润为负值

2)净资产收益率、总资产净利润率为负值。

其影响特征变量如下:

 

注: 现金比率= 货币资金÷ 流动负债;

盈利现金比率= 经营活动的现金净流量÷ 净利润;

主营业务鲜明程度= 主营业务利润÷ |净利润|;

请利用2018年的财务指标相关数据,构建基于BP神经网络的财务风险预警模型。

3、代码复现

3.1  train  & predict

from numpy import *
import matplotlib.pyplot as plt
import time
import numpy as np
from data import Dataset
import pickle
# calculate the sigmoid function
#算法推理来自于:https://blog.youkuaiyun.com/zouxy09/article/details/20319673
#commit code to https://github.com/Linby1103/Pre-warning.git

class LR(object):
    def __init__(self,train_data,label_):

        self.traindata=train_data
        self.label=label_

    def sigmoid(self,z):
        return 1.0 / (1 + exp(-z))

    def train(self,opts,weight_path="weights.pkl"):
        # train a logistic regression model using some optional optimize algorithm
        # traindata is a mat datatype, each row stands for one sample
        #label is mat datatype too, each row is the corresponding label
        #opts is optimize option include step and maximum number of iterations
        # calculate training time
        startTime = time.time()

        numSamples, numFeatures = shape(self.traindata)
        alpha = opts['alpha'];
        maxIter = opts['maxIter']
        weights = ones((numFeatures, 1))


        # optimize through gradient descent algorilthm
        for k in range(maxIter):
            if opts['optimizeType'] == 'gradDescent':  # gradient descent algorilthm
                output = self.sigmoid(self.traindata * weights)
                error = self.label - output  
                weights = weights + alpha * self.traindata.transpose() * error  # (y-err)*x  BP
            elif opts['optimizeType'] == 'stocGradDescent':  # stochastic gradient descent
                for i in range(numSamples):
                    output = self.sigmoid(self.traindata[i, :] * weights)#注意这traindata是转化为mat类型的数据,所以这里用* 和用dot做矩阵的乘法是一样的
                    error = self.label[i, 0] - output
                    weights = weights + alpha * self.traindata[i, :].transpose() * error
            elif opts['optimizeType'] == 'smoothStocGradDescent':  # smooth stochastic gradient descent
                # randomly select samples to optimize for reducing cycle fluctuations
                dataIndex = range(numSamples)
                for i in range(numSamples):
                    alpha = 4.0 / (1.0 + k + i) + 0.01
                    randIndex = int(random.uniform(0, len(dataIndex)))
                    output = self.sigmoid(self.traindata[randIndex, :] * weights)
                    error = self.label[randIndex, 0] - output
                    weights = weights + alpha * self.traindata[randIndex, :].transpose() * error
                    del (dataIndex[randIndex])  # during one interation, delete the optimized sample
            else:
                raise NameError('Not support optimize method type!')

        print('training finished!  %fs!' % (time.time() - startTime))

        try:
            pickf = open(weight_path, 'wb')
            print("Save weight to {}".format(weight_path))
            data = {"weight": weights}
            pickle.dump(data, pickf)
        except Exception as e:
            print("Write weight to {} fail! {}".format(pickf,e))
            pickf.close()
        finally:
            pickf.close()

    # test  trained Logistic Regression model given test set
    def predict(self,weights, test_x, test_y):
        numSamples, numFeatures = shape(test_x)
        matchCount = 0
        result=[]
        for i in range(numSamples):
            prob = 1 if self.sigmoid(test_x[i, :] * weights)[0, 0] > 0.5 else 0
            result.append(prob)
            if prob == bool(test_y[i, 0]):
                matchCount += 1
        accuracy = float(matchCount) / numSamples
        print("accuracy={}".format(accuracy))
        return result
    def load_weight(self,path):
        weight={}
        try:
             weight = pickle.load(open(path,'rb'))["weight"]
             print(weight.shape)
        except Exception as e:
            print("Load weight faild! {}".format(e))
        finally:
            return weight



def loadData():
    train_x = []
    train_y = []
    fileIn = open('./data/testdata.txt')
    for line in fileIn.readlines():
        lineArr = line.strip().split()
        train_x.append([1.0, float(lineArr[0]), float(lineArr[1])])
        train_y.append(float(lineArr[2]))
    return mat(train_x), mat(train_y).transpose()

if __name__=="__main__":
    STATUS = ['非ST','ST']
    save_model="weights.pkl"

    train, label = Dataset.GetDatafromDict()
    trainarrayx=mat(train)
    labelarray=mat(label).transpose()
    logistreg = LR(trainarrayx,labelarray)
    # print(trainarrayx.shape,labelarray.shape)
    opts={"alpha":0.001,"maxIter":200,"optimizeType":"gradDescent"}
    logistreg.train(opts,save_model)
    weights=logistreg.load_weight(save_model)
    res=logistreg.predict(weights,trainarrayx,labelarray)

    for i in range(len(res)):
        print("预测结果 :{}---原始数据:{}".format(STATUS[res[i]], STATUS[label[i]]))












3.2 Create dataset-数据来源于excel

import xlrd
import os
import numpy as np


class ExcelReade(object):
    def __init__(self, excel_name, sheet_name):
        """
        # 我把excel放在工程包的当前文件夹中:
        # 1.需要先获取到工程文件的地址
        # 2.再找到excel的文件地址(比写死的绝对路径灵活)

            os.path.relpath(__file__)
            1.根据系统获取绝对路径
            2.会根据电脑系统自动匹配路径:mac路径用/,windows路径用\
            3.直接使用__file__方法是不会自动适配环境的
        """

        self.excel_path = excel_name
        # 打开指定的excel文件
        self.date = xlrd.open_workbook(self.excel_path)
        # 找到指定的sheet页
        self.table = self.date.sheet_by_name(sheet_name)
        self.rows = self.table.nrows  # 获取总行数
        self.cols = self.table.ncols  # 获取总列数

    def data_dict(self):
        if self.rows <= 1:
            print("总行数小于等于1,路径:", end='')
            print(self.excel_path)
            return False
        else:
            # 将列表的第一行设置为字典的key值
            keys = self.table.row_values(0)
            # 定义一个数组
            data = []
            # 从第二行开始读取数据,循环rows(总行数)-1次
            for i in range(1, self.rows):
                # 循环内定义一个字典,每次循环都会清空
                dict = {}
                # 从第一列开始读取数据,循环cols(总列数)次
                for j in range(0, self.cols):
                    # 将value值关联同一列的key值
                    dict[keys[j]] = self.table.row_values(i)[j] if self.table.row_values(i)[j] != "NULL" else "0"
                # 将关联后的字典放到数组里
                data.append(dict)


            return data
#Stkcd	净利润2017	净利润2018	净资产收益率	总资产净利润率	x1	x2	x3	x4	x5	x6	x7	x8	x9	x10	x11	x12	x13	x14

def GetDatafromDict():
    start = ExcelReade('./data/dataset.xlsx', 'Sheet1')
    data = start.data_dict()

    train=[]
    label=[]

    for i in range(len(data)):
        array=[]
        array.append(float(data[i]['净利润2017']))
        array.append(float(data[i]['净利润2018']))
        array.append(float(data[i]['净资产收益率']))
        array.append(float(data[i]['总资产净利润率']))
        array.append(float(data[i]['x1']))
        array.append(float(data[i]['x2']))
        array.append(float(data[i]['x3']))
        array.append(float(data[i]['x4']))
        array.append(float(data[i]['x5']))
        array.append(float(data[i]['x6']))
        array.append(float(data[i]['x7']))
        array.append(float(data[i]['x8']))
        array.append(float(data[i]['x9']))
        array.append(float(data[i]['x10']))
        array.append(float(data[i]['x11']))
        array.append(float(data[i]['x12']))
        array.append(float(data[i]['x13']))
        array.append(float(data[i]['x14']))
        train.append(array)
        if float(data[i]['净利润2017'])*float(data[i]['净利润2018'])<0:
            label.append(0)
        else:
            label.append(1)
    return np.array(train) ,np.array(label)



if __name__ == '__main__':
    start = ExcelReade('C:/Users/91324/Desktop/datasset.xlsx','Sheet1')
    data = start.data_dict()
    GetDatafromDict(data)


数据集,代码上传至:https://github.com/Linby1103/Pre-warning.git

 

BigQuery ML:用SQL实现端到端机器学习建模 SQL驱动的机器学习正成为数据科学工程化的新范式——它将模型训练、特征工程与数据查询统一在声明式语言中,依托分布式执行引擎实现PB级数据原地建模。其核心原理在于将特征逻辑内嵌于查询语句,由SQL引擎保障一致性与可复现性,从而消除数据移动、环境维护和特征漂移三大隐性成本。技术价值体现在显著压缩MLOps周期(从天级降至分钟级)、降低算法使用门槛,并强化业务可解释性。典型应用场景包括用户流失预警、复购率预测、实时点击率预估等高时效性BI融合任务。本文聚焦BigQuery ML实战体系,覆盖嵌套数据解构、防爆炸特 阅读详情

相关推荐

Azure ML Studio端到端机器学习流水线实战指南

机器学习流水线是将数据准备、特征工程、模型训练到部署监控串联成自动化闭环的技术范式。其核心原理在于通过可复用、可版本化、可审计的组件化流程,实现AI能力从实验到生产的可靠跃迁。技术价值体现在显著降低MLOps门槛、加速业务验证周期、强化跨角色协作与合规治理能力。典型应用场景覆盖零售销量预测、金融风控建模、工业设备预警等需快速迭代且强监管的领域。本文聚焦Azure ML Studio这一支持可视化编排与Python深度嵌入的混合式云平台,深入解析其Datastore数据接入、Execute Python Sc

ateu52935的博客 347

Azure ML Studio企业级机器学习流水线实战指南

机器学习流水线是支撑AI模型从实验走向生产的核心工程范式,其本质是围绕数据血缘、模型版本、执行可复现性与跨角色协作构建的全生命周期治理体系。Azure ML Studio并非低代码玩具,而是以Workspace、Compute Target、Pipeline和Model Registry为支柱的ML Ops平台前端,天然支持可审计的数据集版本管理、参数化管道编排与自动化重训练。它特别适用于需要满足合规要求、实现多团队协同交付、并快速完成PoC到Production转化的企业级场景——尤其在零售推荐、金融风控

weixin_34279579的博客 500

ML工程化三阶选型法:从原型到生产的工具链实战指南

机器学习模型开发不仅是算法选择,更是工程能力的系统性体现。可复现性、可交付性与可维护性构成ML落地的核心三角,其本质是将模糊业务需求精准翻译为技术约束——包括人的能力边界、事的复杂程度与系统的承载能力。PyTorch动态图提供研究自由,但需通过TorchScript保障部署稳定性;Scikit-learn凭借ColumnTransformer和HistGradientBoosting成为结构化数据生产基石;XGBoost的hist树方法与gamma正则化平衡性能与泛化;MLflow以实验追踪解决复现难题;T

优快云头条 1000

用逻辑回归模型解决互联网金融信用风险问题

(一)基础铺垫 逻辑回归(Logistic Regression) 针对因变量为分类变量而进行回归分析的一种统计方法,属于概率型非线性回归。 优点:算法易于实现和部署,执行效率和准确度高; 缺点:离散型的自变量数据需要通过生产虚拟变量的方式来使用; (二)底层原理及逻辑 在线性回归中,因变量是连续变量,那么线性回归能够根据因变量和自变量之间存在的线性关系来构造回归方程;但是,一旦

jacky_zhuyuanlu的博客 3775

ML模型服务化落地:从Notebook到生产级推理架构

机器学习模型服务化是AI工程化的关键环节,其核心在于将训练完成的模型转化为稳定、可观测、可伸缩的在线推理服务。这涉及模型导出标准化(如ONNX)、推理运行时选择(如Triton Inference Server)、服务编排(Kubernetes+Istio服务网格)以及灰度发布与热更新等关键技术。相比传统Flask/FastAPI单体部署,现代架构通过解耦模型生命周期与请求生命周期,显著提升资源隔离性、发布可靠性与故障定位效率。在电商推荐、金融风控、IoT实时分析等高SLA场景中,该范式已成为支撑毫秒级响应

weixin_30423977的博客 425

构建机器学习质量与成熟度框架:从理论到工程实践

在软件工程领域,质量模型与成熟度框架是保障系统可靠性的基石。当这一理念应用于机器学习系统时,其复杂性显著增加。一个ML系统不仅是预测模型,更是一个包含数据、特征、训练、部署与监控的完整工程流水线。MLOps解决了流程效率问题,但如何系统化评估与保障其全生命周期的健康度,则需要一套可量化、可操作的标准。机器学习质量与成熟度框架应运而生,它通过定义七大核心质量特性(如效用性、经济性、鲁棒性等)及其子特性,将抽象的质量要求具体化。该框架的核心技术价值在于引入了“成熟度等级”与“业务关键性”的匹配机制,使得对内部概

weixin_30245867的博客 632

计算机毕业设计题目大全大数据题目

序号 题目 题目要求(该课题的研究目的、所实现的主要功能等) 1 基于Hadoop的大数据宠物商城推荐系统 收集大量有关宠物产品和用户购买行为的数据,并使用hadoop进行数据处理和存储,以构建一个个性化的宠物产品推荐系统。系统应该可以分析用户的浏览记录,购买历史,喜好标签等信息,使用推荐算法为每位用户推荐最适合他们的宠物用品。 2 大规模文本分析系统 使用hadoop分布式计算能力,分析大量文本数据,如新闻文章,社交媒体帖子或客户评论,以提取信息、情感分析或主题

laojin1234的博客 1354

ML工程师进阶路线图:从本科生到可交付系统工程师

机器学习工程化(MLOps)是将模型从实验环境推向高可用、可监控、可迭代生产服务的关键能力。其核心原理在于打通数据、模型与服务的全链路闭环,强调数据可信度保障、特征生命周期管理、弹性服务设计及业务指标归因等工程实践。相比纯算法研究,ML工程化更关注资源成本意识、故障归因能力和协作接口标准化,技术价值体现在降低交付风险、提升系统稳定性与加速AB测试验证。典型应用场景包括实时推荐系统、边缘端模型部署、A/B测试流水线构建等。本文聚焦本科生转型路径,以真实项目闭环和能力映射矩阵为锚点,系统拆解ML工程化落地所需的

weixin_29179311的博客 253

【推荐算法 学习与复现】-- 逻辑回归算法族 -- GBDT+LR

协同过滤仅仅使用有限的用户行为信息,逻辑回归算法模型大多引入用户行为、用户特征、物品特征和上下文特征等,从CF逐步过渡到综合不同特征的机器学习模型。 (1)逻辑回归模型 将用户特征(年龄、性别等)、用户行为(收藏、浏览等)、物品特征(属性、描述等)和上下文特征(当前时间、地点等)转化成数值型特征向量;以点击率为优化目标;利用已有数据进行训练学习模型参数;利用学习完成的模型进行推理预测用户点击率。 (2)POLY2模型--特征交叉的开始 防止“辛普森悖论”(数据...

Big_Huang的博客 1300

机器学习实战:从核心算法到项目落地的完整指南

机器学习作为人工智能的核心分支,其本质是让计算机从数据中自动学习规律并做出预测。其工作原理通常遵循数据驱动的范式,通过算法模型在训练数据上优化参数,以最小化预测误差。这项技术的核心价值在于能够自动化复杂决策过程,从海量数据中挖掘潜在模式,广泛应用于金融风控、销售预测、图像识别和自然语言处理等领域。本文聚焦于监督学习中的决策树、逻辑回归、支持向量机(SVM)和神经网络等核心算法,通过Python和Scikit-learn库,详细拆解了从数据预处理、模型训练、评估到超参数调优的完整工程化流程,并针对模型过拟合、

weixin_33857679的博客 318

商业分析师转ML工程师的工程化跃迁路径

机器学习工程师(MLE)的本质是数据产品的交付者,而非算法研究者。其核心能力始于对业务问题的精准翻译、端到端数据管道的可观测治理,以及模型在真实技术栈中的稳定服役能力。相比纯算法背景者,商业分析师天然具备指标归因意识、数据异常敏感度和闭环验证思维——这些正是MLOps落地中最稀缺的工程素养。本文围绕业务理解力、数据闭环意识、工程化落地能力与MLOps前置认知四大关键词,系统拆解如何将BA日常的SQL分析、AB测试设计、报表归因等实践,转化为可复用的ML工程能力,并落地于推荐系统优化、智能预警、规则引擎增强等

chudan0503的博客 440

机器学习-算法模型系列文章:01-算法选型全景图(选错算法,数据再多也白跑)

① 一张「拿到数据 → 选定算法」的决策路线图,下次建模不再靠猜;② 9大经典算法的原理一句话版 + 优缺点 + 适用场景速查表,面试和实战都用得上;③ 一段可直接运行的代码,在同一份真实数据集上把7个分类算法跑一遍横向对比。本文是《机器学习-算法模型系列》第1篇(开篇),后面9篇每篇拆解一个算法。

tigerhhzz的博客 1万+

ML工程师实战指南:Python工程化落地全流程

机器学习(ML)已从算法研究迈入工程化落地阶段,核心挑战不再是模型精度,而是系统稳定性、迭代效率与业务价值闭环。ML Engineering作为连接算法与生产的桥梁,强调用Python构建可监控、可回滚、可协作的端到端机器学习系统。其本质是将数据探查、特征管理、分布式训练、API服务、AB测试、模型监控等环节标准化为工程实践,而非孤立技术堆砌。典型应用场景包括推荐系统、实时CTR预估、风控模型上线等,需直面训练-推理不一致、特征漂移、GPU资源浪费、日志缺失等真实故障。本书聚焦ML生命周期七大断点,以PyT

weixin_33761747的博客 315

【推荐算法 学习与复现】-- 逻辑回归算法族 -- LR

协同过滤仅仅使用有限的用户行为信息,逻辑回归算法模型大多引入用户行为、用户特征、物品特征和上下文特征等,从CF逐步过渡到综合不同特征的机器学习模型。 (1)逻辑回归模型 将用户特征(年龄、性别等)、用户行为(收藏、浏览等)、物品特征(属性、描述等)和上下文特征(当前时间、地点等)转化成数值型特征向量;以点击率为优化目标;利用已有数据进行训练学习模型参数;利用学习完成的模型进行推理预测用户点击率。 代码编写原理参考大多参照《深度学习推荐系统》书籍内容,原理见后面附...

Big_Huang的博客 1339

基于 MATLAB BP 神经网络的财务预测

通过基于 MATLAB BP 神经网络的财务预警模型,我们可以对企业的财务风险进行有效地识别和预测。在具体实现过程中,需要注意对财务数据的预处理、模型参数的调整以及结果的解释等问题。MLP模型的输入层、输出层和隐含层之间均为全连接,每个神经元都是上一层神经元的加权求和再加偏置后的非线性变换。其中,输入层接受财务数据,输出层输出财务预测结果,隐含层则对输入数据进行处理和抽象。其中,X’是标准化后的值,X是原始值,μ_i 和σ_i 分别是指标 i 在样本中的均值和标准差。其中,X’是标准化后的值,X是原始值。

TechPulseZ的博客 923

语音识别(ASR)-- Kaldi 学习笔记

语音识别(ASR)-- Kaldi学习笔记语音识别简介GMM-HMM基本原理DNN-HMM(基于神经网络)KaldiKaldi架构简介Kaldi在Windows下的安装工具准备编译OpenFST配置PortAudio配置KaldiKaldi目录说明 语音识别简介 语音识别(Speech Recognition)技术,也被称为自动语音识别(Automatic Speech Recognition, ASR)、计算机语音识别(Computer Speech Recognition)或是语音转文本识别(Spee

qq_43318971的博客 4849

从零开始理解homemade-machine-learning预测函数:模型推理实现全指南

homemade-machine-learning是一个用Python实现流行机器学习算法的开源项目,包含交互式Jupyter演示和数学原理解释。本文将深入解析其预测函数的工作原理,帮助新手轻松掌握机器学习模型推理的核心实现。 ## 🧩 机器学习预测函数的核心作用 预测函数(Predict Function)是机器学习模型的"大脑",它接收输入数据并输出模型的预测结果。在homemade-m

gitblog_00050的博客 960

TSC条码打印机C#例程(tsclib.dll调用) 【转】

//----program.cs using System;using System.Collections.Generic;using System.Windows.Forms; using System.Runtime.InteropServices;public class TSCLIB_DLL{[DllImport("TSCLIB.dll", EntryPoint = "abou...

weixin_33843947的博客 2443

机器学习项目工程化实践:从理论到生产的质量保障体系

在机器学习领域,从理论算法到生产部署的鸿沟远比传统软件开发更为复杂。Andrew Ng的机器学习专项课程项目为我们提供了一个绝佳的案例研究——如何将学术理论转化为可维护、可测试、可扩展的工程化实践。本文将深入探讨机器学习项目的质量保障体系,分享从代码组织到自动化测试的完整工程化解决方案。 ## 问题驱动:机器学习项目面临的独特挑战 与传统软件项目不同,机器学习项目面临着多重独特挑战: 1.

gitblog_00988的博客 855

华为od机试|华为od机试真题2025|华为od题库|华为od机考|2025C卷B卷

华为od机试|华为od机试真题2025|华为od题库|华为od机考|华为od机试|华为od机试真题2025|华为od题库|华为od机考|华为od机试|华为od机试真题2025|华为od题库|华为od机考|华为od机试|华为od机试真题2025|华为od题库|华为od机考|B卷C卷

u014481728的博客 10万+

OAI-5G开源通信平台实践(一)-安装 部署及RFsimulator基本测试

OAI (Open Air Interface) 是目前开源5G/4G项目中最完善、最成熟的一个,并且仍然在持续更新。其包含基站、终端及核心网网元的代码,可基于x86\arm+射频卡搭建实际硬件平台,也可在x86平台上对rf\phy等层进行模拟,做各网元协议栈的单独测试验证。本文总结了x86平台下,oai的安装及运行方式。包括NTN分支和主分支的rf simulator、nos1、端到端部署等场景的验证流程,同时总结了验证过程中遇到的问题及解决方法。

十年通信老兵的技术修炼之路——从3G到5G,从地面基站到卫星通信。 2966
上一篇: Linux中使用libjpeg读取jpeg的data(不含文件头)
下一篇: linux下,批量复制文件名带空格的文件
LiBin1103
博客等级 码龄9年 38粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值