logistics regression

发布时间:2026/8/14 16:02:44

logistics regression
P与NPP能在多项式时间能找到解NP能在多项式时间内验证候选解的对错。NP 难所有 NP 问题都能在多项式时间内归约到它即它至少和 NP 类问题一样难。不要求多项式时间可验证。NP 完全NP ∩ NP 难机器学习的很多问题是 NP 难甚至更难的问题。但学习算法必须在多项式时间内找到解。如果可以彻底避免过拟合那就可以通过优化经验误差得到最优解构造性证明了 “P NP”。因此如果我们相信 “P ≠ NP”过拟合就不可避免。留出法使用注意事项1分层抽样。训练集、测试集中样本类别比例需和原数据集保持一致2train ratio。如果训练样本过小结果偏差大。如果测试样本过小结果方差大。代码Logistic Regression数学原理为什么需要 Logistic Regression? 答Logistic Regression 本质上是解决分类问题。如果使用单位阶跃函数输出标签再用 MSE 均方误差进行拟合由于单位阶跃函数不可导从数学上讲极难优化。Logistic Regression 做了什么去完成分类答使用 sgmoid 函数讲线性模型的输出值由离散标签变成了连续的概率值即模型输出为正例的概率构造负似然对数求解分类正确的最优参数sgmoid 函数引入了非线性没有闭式解可以直接通过数学公式等方法计算出的解可通过牛顿法求最优解。负似然对数及牛顿法求解似然函数likelihood∑i1mp0y0p1y1似然函数likelihood \sum_{i1}^{m}p_{0}^{y_{0}}p_{1}^{y_{1}}似然函数likelihood∑i1m​p0y0​​p1y1​​负对数似然negative_log_likelihood−∑i1m(y0logp0y1logp1)∑i1mlog(1ezi)−yizi负对数似然negative\_ log\_likelihood -\sum_{i1}^{m}(y_{0}logp_{0}y_{1}logp_{1}) \sum_{i1}^{m}log(1e^{z_{i}})-y_{i}z_{i}负对数似然negative_log_likelihood−∑i1m​(y0​logp0​y1​logp1​)∑i1m​log(1ezi​)−yi​zi​牛顿法coefficientst1coefficientst−H−1grad牛顿法coefficients_{t1} coefficients_{t}-H^{-1}grad牛顿法coefficientst1​coefficientst​−H−1grad二阶导HHjk∑i1mpi(1−pi)xijxikj/k是参数编号Hjk是矩阵里的一个元素H_{jk} \sum_{i1}^{m} p_i(1-p_i)x_{ij}x_{ik}j/k是参数编号 H_{j}{k}是矩阵里的一个元素Hjk​∑i1m​pi​(1−pi​)xij​xik​j/k是参数编号Hj​k是矩阵里的一个元素梯度grad)∑i1m(pi−yi)xi梯度grad) \sum_{i1}^{m}(p_{i}-y_{i})x_{i}梯度grad)∑i1m​(pi​−yi​)xi​代码dataclass# 快速定义只设置数据的类比如 initclassTrainingResult:coefficients:list[float]loss:floatiterations:intconverged:bool# 是否收敛classLogisticRegression:def__init__(self,max_iter:int100,tolerance:float1e-8,l2:float0.01)-None:# l2 0.01ifmax_iter0:raiseValueError(max_iter must be positive.)iftolerance0:raiseValueError(tolerance must be positive.)ifl20:raiseValueError(l2 must be non-negative.)self.max_itermax_iter self.tolerancetolerance self.l2l2 self.coefficients:list[float][]deffit(self,features:list[list[float]],labels:list[int])-TrainingResult:ifnotfeatures:raiseValueError(No training data was provided.)# 特征值非空iflen(features)!len(labels):raiseValueError(Feature rows and labels must have the same length.)# 特征值和标签一一对应ifset(labels)-{0,1}:# 对二分类而言只有 01raiseValueError(Labels must be encoded as 0 or 1.)feature_countlen(features[0])# 取出特征值的属性个数ifany(len(row)!feature_countforrowinfeatures):# 每个特征的属性个数必须一样不多不少raiseValueError(All feature rows must have the same length.)design_matrix[[1.0]rowforrowinfeatures]# 增加截距项parameter_countfeature_count1# 参数值1coefficients[0.0]*parameter_count# 初始化参数列表convergedFalse# 未收敛foriterationinrange(1,self.max_iter1):# 最多迭代 max_iter 次probabilities[sigmoid(dot(coefficients,row))forrowindesign_matrix]# 预测概率值列表gradient[0.0]*parameter_count# 梯度初始化hessian[[0.0]*parameter_countfor_inrange(parameter_count)]# 二阶导hessian矩阵forrow,probability,labelinzip(design_matrix,probabilities,labels):# 对于每一组数据residualprobability-label weightprobability*(1.0-probability)forcol_indexinrange(parameter_count):gradient[col_index]residual*row[col_index]# 按照公式不断累加梯度forinner_indexinrange(parameter_count):hessian[col_index][inner_index]weight*row[col_index]*row[inner_index]# 累加 hessian 矩阵中的每个元素forindexinrange(1,parameter_count):# 在截距以外的其他参数加正则化项下面是求一阶导 二阶导之后的内容gradient[index]self.l2*coefficients[index]hessian[index][index]self.l2# m 个样本之后才更新stepsolve_linear_system(hessian,gradient)coefficients[coefficient-deltaforcoefficient,deltainzip(coefficients,step)]ifvector_norm(step)self.tolerance:convergedTruebreakself.coefficientscoefficientsreturnTrainingResult(coefficients,self.loss(features,labels),iteration,converged)defpredict_proba_one(self,feature_row:list[float])-float:ifnotself.coefficients:raiseValueError(Model has not been fitted yet.)returnsigmoid(self.coefficients[0]dot(self.coefficients[1:],feature_row))defpredict_one(self,feature_row:list[float],threshold:float0.5)-int:returnint(self.predict_proba_one(feature_row)threshold)defloss(self,features:list[list[float]],labels:list[int])-float:design_matrix[[1.0]rowforrowinfeatures]negative_log_likelihood0.0forrow,labelinzip(design_matrix,labels):scoredot(self.coefficients,row)negative_log_likelihoodsoftplus(score)-label*score regularization0.5*self.l2*sum(coefficient*coefficientforcoefficientinself.coefficients[1:])returnnegative_log_likelihoodregularization读写文件csv/txt/json/mdimportcsv# 读取和写入 CSV 文件frompathlibimportPath# 更方便、安全地处理文件路径pathPath(data.txt)DEFAULT_DATA_PATHPath(__file__).with_name(watermelon_3a.csv)# _file_: 当前 Python 文件的路径字符串with_name: 要找的文件名前者是相对于当前工作目录读取名为data.txt的文件返回的是一个 Path 对象后者是相对于当前 .py 脚本读取名为 watermelon_3a.csv 的文件返回的是一个 Path 对象。列表推导式的三种形式列表推导式就是一种快速生成列表的写法。missing_columns[columnforcolumnin(*feature_columns,label_column)ifcolumnnotinreader.fieldnames]# 检查特征列和标签列是否存在ifmissing_columns:raiseValueError(fMissing columns in CSV:{, .join(missing_columns)})[表达式for变量in可迭代对象][表达式for变量in可迭代对象if条件][值1if条件else值2for变量in可迭代对象]# if{值1}else{值2}*后面加元组、列表、字符串、range、集合、字典表示解包。默认情况下解包字典的key。如果需要解包值/键值对 *dict.values()/ *dict.items()遍历特征列和标签列如果有不在表头的就记录在列表 missing_columns。分隔符.join(字符串列表在每两个元素之间放一个分隔符用来把一堆字符串拼成一个字符串。比如parts[2026,08,13]print(-.join(parts))# 2026-08-13python里的条件表达式三元表达式比如Aif条件elseB1ifrow[label_column].strip()positive_labelelse0with···as···用法如下with表达式as变量:代码块# Python 的上下文管理器语法# 最常见用途是打开文件后自动关闭文件withpath.open(r,encodingutf-8)asf:textf.read()withpath.open(r,encodingutf-8-sig,newline)ascsv_file:把文件打开把打开的文件对象命名为 csv_file在 with 代码块里使用它代码块结束后自动关闭文件newline“”它控制 Python 打开文本文件时怎么处理换行符。CSV 模块自己会处理换行。如果你不写 newline“”Python 可能先自动转换一遍换行csv 模块又处理一遍尤其在 Windows 上写 CSV 时可能出现多余空行。“utf-8-sig”用 UTF-8 读取同时兼容文件开头可能存在的 BOM。withpath.open(r,encodingutf-8-sig,newline)ascsv_file:# new_linereadercsv.DictReader(csv_file)# 一个读取器。这个读取器有自己的读取规则ifreader.fieldnamesisNone:# 读取器相当于是一个类.fieldnames表示取出表头其实也就是字典的键列表raiseValueError(CSV file has no header row.)创建了一个对象DictReader可迭代、内部有自己的读取规则它的规则读取第一行作为表头 fieldnames后面每一行数据value都和表头key配对每次迭代返回一个字典 row。也可以这么理解csv.DictReader 是一个类csv.DictReader(csv_file) 创建一个 DictReader 实例对象。row_ids:list[str][]# 保存样本编号features:list[list[float]][]# 保存样本特征矩阵labels:list[int][]# 保存标签正类为 1负类为 0forline_number,rowinenumerate(reader,start2):# reader是一个可迭代对象enumerate是给它加编号从1开始但是这里规定从2开始。enumerate 返回的对象是什么编号加在最前面row_ids.append(row.get(编号,str(line_number-1)))# 是从可迭代对象中读出的字典.dict.get(key,default如果dict[key]存在那么就用它否则就用行编号减1features.append([float(row[column])forcolumninfeature_columns])# 添加的元素添加的是一个列表。列表中的元素就是字典从键当中取的值labels.append(1ifrow[label_column].strip()positive_labelelse0)# python中的三元推导式enumerate() 返回的是一个可迭代对象它每次迭代会返回一个二元组(编号, 原来的元素)指定起始编号start2默认从0开始。enumerate() 不是把编号真的“加进”原列表或原字典里它只是遍历时临时配一个编号。returnrow_ids,list(feature_columns),features,labels注意有逗号才是元组括号只是分组或者提高可读性。当然类型打印的时候括号也是用来区分类别的一个标志。但自己写的时候有括号声明的就是元组。比如这个 return 返回的就是一个元组。

相关新闻

烘焙店收银系统怎么选?五款主流方案从预订到会员复购的实测对比

烘焙店收银系统怎么选?五款主流方案从预订到会员复购的实测对比

2026/8/14 16:02:44

烘焙是餐饮里少有的增量赛道,但竞争同样残酷:短保产品按天甚至按小时计损耗,顾客先看颜值再下单,复购全靠回头客。收银系统选不好,损耗、排队、复购三座大山压得小店喘不过气。本文把收钱吧、银豹、美团收银、客如云、…

微信聊天记录备份全指南:PyWxDump 删库警示与合规实操手册

微信聊天记录备份全指南:PyWxDump 删库警示与合规实操手册

2026/8/14 16:02:44

微信聊天记录备份全指南:PyWxDump 删库警示与合规实操手册 【免费下载链接】PyWxDump 删库 项目地址: https://gitcode.com/GitHub_Trending/py/PyWxDump 微信承载了太多难以复制的记忆——孩子的第一句话、家人的叮嘱、客户的关键确认、离职前的项目交接。可…

lu,大鼠穿梭箱、大小鼠穿梭箱、大鼠穿梭实验箱、穿梭视频分析系统

lu,大鼠穿梭箱、大小鼠穿梭箱、大鼠穿梭实验箱、穿梭视频分析系统

2026/8/14 15:52:44

穿梭实验系统是研究动物条件反射、定量观测动物行为变化的经典设备。实验箱体底部布设不锈钢电击栅提供非条件足底电击刺激,顶部噪声发生器输出条件刺激;条件刺激结束前动物移动至安全区记为主动回避;电击触发后完成躲避记为被动回避。经反复…

从 33GB 到 5GB:这款多线程微信清理工具,帮你安全告别缓存堆积

从 33GB 到 5GB:这款多线程微信清理工具,帮你安全告别缓存堆积

2026/8/14 17:02:47

从 33GB 到 5GB:这款多线程微信清理工具,帮你安全告别缓存堆积 【免费下载链接】CleanMyWechat 自动删除 Windows 和 Mac 电脑端微信缓存数据,包括从所有聊天中自动下载的大量文件、视频、图片等数据内容,解放你的空间。 项目地…

DOM 操作、事件处理与 jQuery 选择器

DOM 操作、事件处理与 jQuery 选择器

2026/8/14 17:02:47

DOM 操作、事件处理与 jQuery 选择器 本节聚焦网页交互的三个基础能力:使用 DOM 查找和修改页面元素、通过事件响应用户行为,以及使用 jQuery 简化选择与操作。DOM 是浏览器将 HTML 页面表示为对象树的方式;jQuery 是建立在原生 JavaScript …

G-Helper 10分钟上手教程:华硕笔记本性能与续航的一站式调校

G-Helper 10分钟上手教程:华硕笔记本性能与续航的一站式调校

2026/8/14 17:02:47

G-Helper 10分钟上手教程:华硕笔记本性能与续航的一站式调校 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbo…

把Steam、Epic、GOG全装进一个界面:Playnite重塑我的游戏库

把Steam、Epic、GOG全装进一个界面:Playnite重塑我的游戏库

2026/8/14 17:02:46

把Steam、Epic、GOG全装进一个界面:Playnite重塑我的游戏库 【免费下载链接】Playnite Video game library manager with support for wide range of 3rd party libraries and game emulation support, providing one unified interface for your games. 项目地址…

让PT站转载一键完成:auto_feed油猴脚本使用指南

让PT站转载一键完成:auto_feed油猴脚本使用指南

2026/8/14 17:02:46

让PT站转载一键完成:auto_feed油猴脚本使用指南 【免费下载链接】auto_feed_js PT站一键转载脚本 项目地址: https://gitcode.com/gh_mirrors/au/auto_feed_js 凌晨一点,你刚在海外PT站刷到一部热映电影。接下来的半小时里,你复制简介…

自动化会话超人工!Ramp Inspect Agent 接入 CI/告警,实现 AI SRE 自主处理线上事故

自动化会话超人工!Ramp Inspect Agent 接入 CI/告警,实现 AI SRE 自主处理线上事故

2026/8/14 16:52:46

工程师还没来得及输入第一句 Prompt,Agent 已经开始干活了。 “More Inspect sessions are coming from automations than humans.” Rahul Sengottuvelu:现在,Inspect 由自动化触发的会话,已经比人工发起的更多。 过去&#xff…

比较好的亚太EMBA,问了6位校友师资差别真的挺大

比较好的亚太EMBA,问了6位校友师资差别真的挺大

2026/8/13 11:01:28

比较好的亚太EMBA核心差异先看什么?对于希望兼顾工作与系统管理能力提升的亚太区高管而言,筛选匹配度高的EMBA项目时,师资配置是决定学习体验与实际收获的核心要素之一。我们结合3-4个公开信息透明、办学历史较长的亚太区主流EMBA项目特点&am…

备考3个月对比6份资料 海外游学的亚洲EMBA面试注意点

备考3个月对比6份资料 海外游学的亚洲EMBA面试注意点

2026/8/14 10:48:24

备考海外游学的亚洲EMBA面试,核心要围绕项目国际化设计逻辑、个人跨文化管理经验匹配度两个维度准备,避免把游学模块等同于普通旅游参访的认知偏差。不少备考者花3个月对比6份资料,却容易忽略面试官对“国际视野落地能力”的考察——比如香港…

比较好的国内EMBA,问了二十位校友聊透人脉价值

比较好的国内EMBA,问了二十位校友聊透人脉价值

2026/8/13 17:17:06

比较好的国内EMBA核心差异体现在哪些方面?比较好的国内EMBA的核心长期价值,很大程度上依托于校友网络的连接质量与资源生态的活跃度,这也是不少高管在择校时优先考量的因素。我们结合3-4个市场关注度较高的项目公开信息,从课程、师…

大连网站建设找简维科技:为您打造懂业务更懂用户的数字化转型引擎

大连网站建设找简维科技:为您打造懂业务更懂用户的数字化转型引擎

2026/8/14 0:01:53

在这个数字化浪潮席卷全球的今天,企业想要在激烈的市场竞争中站稳脚跟,拥有一张好看的“数字名片”已经远远不够了。很多老板在刚开始接触互联网业务时,都有一个共同的困惑:为什么我花了钱建的网站,就像是在真空中自嗨?访客进来转了两圈就跑了,线索石沉大海,甚至连客服…

临沂网站建设铭镇:深耕本土数字生态,以匠心铸就企业品牌核心竞争力

临沂网站建设铭镇:深耕本土数字生态,以匠心铸就企业品牌核心竞争力

2026/8/14 0:01:54

在这个流量为王、视觉至上的互联网时代,对于临沂乃至整个山东乃至全国的传统中小企业来说,拥有一张精美的“数字名片”早已不再是可选项,而是生存的必答题。每当夜幕降临,沂河两岸灯火辉煌,物流之都的喧嚣逐渐沉淀为对未来的思考。我们常常听到老板们在茶余饭后探讨:为什…

Flutter与OpenHarmony实现剧本杀组队表单开发实战

Flutter与OpenHarmony实现剧本杀组队表单开发实战

2026/8/14 0:01:54

1. 项目概述在移动应用开发领域,跨平台框架Flutter因其高效的开发体验和出色的性能表现,已经成为众多开发者的首选。而OpenHarmony作为新兴的操作系统平台,其开放性和灵活性为开发者提供了全新的可能性。本文将聚焦于一个实际应用场景——剧本…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/8 5:07:31

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/9 13:42:46

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/8 2:30:15

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…