<<机器学习实战>>12-14节笔记:机器学习模型可信度、逻辑回归模型及多分类问题处理

ops/2024/10/20 5:37:41/

12机器学习模型可信度

是否检验模型的指标好就一定说明模型可用?不是,必须得保证训练的样本和整天基本满足同一分布。

统计学习和机器学习区别:统计学习是根据样本模拟总体规律进而去预测(当然要比对样本和总体的统计量是否一致,),而机器学习则会取不同阶段的数据分别做训练集和验证集,不涉及整体。可见机器学习的检验过程更简单。

介绍了如何切分训练集和测试集的code

首先介绍vsplit函数,它可以将数组按行切分

a=np.arange(10).reshape(5,2)

np.vsplit(a,[4,])

得到结果:1——4行一个数组,第5行一个数组

再写数据集切分函数

def array_split(features,labels,rate=0.7,random_state=24):

    np.random.seed(random_state)

    np.random.shuffle(features)

    np.random.seed(random_state)

    np.random.shuffle(labels)#总数据量,用来算要在多少个数据处划分

    num_input=len(labels)

    split_indices=int(num_input*rate)

    xtrain,xtest=np.vsplit(features,[split_indices,])

    ytrain,ytest=np.vsplit(labels,[split_indices,])

return xtrain,xtest,ytrain,ytest

#测试上述函数:

f=np.arange(10).reshape(-1,1)

l=np.arange(1,11).reshape(-1,1)

array_split(f,l)

发现测试结果确实是对应切分的。

训练集、验证集、测试集:训练集调参,验证集调超参,测试集严格不能带入模型训练中。如果想进一步提升参数准确度,还可用交叉验证。

13逻辑回归与多分类

广义线性模型:在线性模型两侧加函数,使得它能捕捉更一般的规律

一个小技巧:在x后面加一列1可以方便后续求出截距项

几率与对数几率:

而对于y=wTx,如果将左侧调整为lny/(1-y)则变为对数几率模型

逻辑回归的输出y是否是概率?

如果自变量的分布通过检验,则为概率

14多分类学习

两种思路:将逻辑回归改为多分类形式/将二分类学习器推广到多分类情况中

总体思路:先拆分后集成,即先将数据集拆分成读个、训练多个模型,后续进来的数据用这多个模型进行预测。一般分为三类方法:一对一(OvO)、一对剩余(OvR)和多对多(MvM)

OvO:

把同一分类的变量作为一个集合,然后两两组合

融合:根据每个分类器的结果按照少数服从多数的原则融合

OvR:每次将一类样例作为正例,其余作为反例,训练四个分类器

融合:若仅有一个分类器将新数据预测为正例,则属于它;如果有多个将新数据预测为正例,则选择概率最高的那个分类结果。

两者比较:OvO由于每个数据集更小,因此整体训练时间较短;性能方面两者类似。

MvM:

思路:将任意1/2/3。。。类作为正类,其余作为父类,穷尽所有划分方法,然后挑选几个

融合:根据四个子模型算出新数据编码,然后看离哪个的距离最近

距离计算采用闵可夫斯基距离,公式为

Python实现:

def dist(x,y,cat=2):#cat表示计算几次方的距离

    d1=np.abs(x-y)

    if x.ndim>1 or y.ndim>1:#这个if为了防止一个数组有多行,要按行求和

        res1=np.power(d1,cat).sum(1)#按行求和,power是算几次方

    else:

        res1=np.power(d1,cat).sum()

        res=np.power(res1,1/cat)

return res

测试:

x=np.array([1,2])

y=np.array([[2,3],[4,5]])

dist(x,y)

结果:

array([1.41421356, 4.24264069])


http://www.ppmy.cn/ops/122533.html

相关文章

C++读取大文件三种方法速度比较

目录 测试说明第一种方法:按块读,一次读8kb第二种方法:按行读,一次读一行第三种方法:多线程并行读取完整示例 测试说明 测试文件:100万行,每一行是两个小数,中间用逗号隔开&#xf…

高级java每日一道面试题-2024年10月2日-分布式篇-什么是FLP 不可能性定理?

如果有遗漏,评论区告诉我进行补充 面试官: 什么是FLP 不可能性定理? 我回答: 在Java高级面试中,FLP不可能性定理是一个可能涉及的重要分布式系统理论。以下是对FLP不可能性定理的详细解析: FLP 定理背景 在分布式计算领域,共…

Pycharm常用快捷键

代码编辑 注释/取消注释:ctrl / 折叠代码:ctrl - 展开代码:ctrl 导航 转到函数实现:ctrl b 或 ctrl 鼠标左键 向前导航:ctrl alt 左箭头 向后导航:ctrl alt 右箭头 查找与替换 在当前文件…

MySQL总结

先是数据库的基本介绍和库的操作:MySQL 库 基础操作-CSDN博客 再是MySQL表的操作:CRUD工程师必会:MySQL 表 的操作(全)-CSDN博客 MySQL事务:MySQL事务-CSDN博客 MySQL索引:MySQL索引-CSDN博客…

【QT Quick】C++交互:暴露 C++ 对象到 QML

【QT Quick】C交互:暴露 C 对象到 QML 在 Qt Quick 开发中,使用 Context Property 将 C 对象暴露给 QML 是一种直观有效的方式。这种方法允许我们直接在 QML 中访问 C 对象的属性和方法,而无需使用信号和槽。这篇文章将详细展开如何通过 Con…

泰勒图 ——基于相关性与标准差的多模型评价指标可视化比较-XGBoost、sklearn

1、基于相关性与标准差的多模型评价指标可视化比较 # 数据读取并分割 import pandas as pd import numpy as np import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split plt.rcParams[font.family] = Times New Roman plt.rcParams[axes.unic…

信号与系统 第七章(z变换)

一、z变换 1、z变换公式 (1)一个单位冲激响应为的线性时不变系统,对复数输入信号的响应为,其中,若(为实数,,在z平面上称为单位圆),则对应于的傅里叶变换&am…

LabVIEW提高开发效率技巧----点阵图(XY Graph)

在LabVIEW开发中,点阵图(XY Graph) 是一种强大的工具,尤其适用于需要实时展示大量数据的场景。通过使用点阵图,开发人员能够将实时数据可视化,帮助用户更直观地分析数据变化。 1. 点阵图的优势 点阵图&…