机器学习笔记-02-基础线性算法认识(问题-解答自查版)

前言

以下问题以Q&A形式记录,基本上都是笔者在初学一轮后,掌握不牢或者频繁忘记的点

Q&A的形式有助于学习过程中时刻关注自己的输入与输出关系,也适合做查漏补缺和复盘。

本文可以让读者用作自查,答案在后面,需要时自行对照。


问题集

Q1:奥卡姆剃刀原理?

Q2:KNN的思想?欠拟合和过拟合在KNN中的体现?

Q3:这里尝试把for输出的数经过distance计算,存储到一个数组里面去

distance =  np.sqrt( (i-data_new)[0] ** 2 + (i-data_new)[1] ** 2 )  for i in data_X  ,哪里有错误?

Q3.1:我通过sklearn中的什么函数可以生成自定义的这种数据集?(答案中有代码,生成数据集的常用方式)

Q4:利用sklearn的库进行KNN分类,其X_train,y_train 和 data_new 的数据类型分别是什么?

Q5:这两个方法分别是干什么用的?哪些数据会使用到这类函数?

Q6:数据集切分的用法?

Q7:有一段KNN算法代码:

from sklearn.neighbors import KNeighborsClassifier
knn_classifier = KNeighborsClassifier(n_neighbors=3,weights='distance',p=2
)

这段代码中的 weights='distance',    p=2 分别代表什么意思?

Q8:什么是网格搜索?

Q9:通过sklearn划分数据集?其中最主要的函数是哪个?

Q10:模型评估的以下几个函数中 .fit 方法应该在哪个位置?简单得到score的方法?模型评估的底层实现?

        from sklearn import datasets

        from sklearn.model_selegtenimport train_test_split

        from sklearn.neighbors import KNeighborsClassifier

        from sklearn.metrics import accuracy_score

Q11:如何使用sklearn的库进行超参数搜索?(一句话,用什么接口进行网格搜索?)

Q12:归一化有关问题:StandardScaler

        1)最大最小值归一化;零均值归一化?

        2)StandardScaler 工具的使用?

        3)陷阱:测试集如何进行归一化

Q13:knn中分类问题转化为回归问题,决策规则由分类表决变成了均值法,why?

Q14:knn的印象?优缺点?


线性算法(线性模型):

Q15:其中三者分别属于分类任务还是狭义的回归任务?这两类任务有何不同?

Q16:data = datasets.load_iris() 如何取data的前20个数据样本?是不是 data[:20] ?

Q17:最小二乘法是不是一种投票表决?

Q18:最小二乘法的核心代码?(有足够印象即可)

Q19:.reshape(-1,1) 的核心含义是什么?为什么这里写一个 -1 ?

Q20:MSE和RMSE?这俩一般用模型评估吗?

Q21:R2 具体的好处?

Q22:多项式回归的本质?

Q23:如果在 plt.plot(x,y) 中,x是乱序的,怎么办?(假设之前有 y=x**2+3 已经一一对应上)

Q24:model.coef_ , model.intercept_ 分别是什么意思

Q25:对于model = LinearRegression() 多项式回归,可以多用一下 model.predict(X_new) 方法

注意 X_new 应是一个列向量

Q26:sklearn中,多项式回归的API?  其中的一个参数是degree,代表什么?

Q27:逻辑回归

Q28:逻辑回归中的 “正则化” 是什么意思?(regularization)

Q29:多分类问题:OvO和OvR,大致思想是什么


 


参考解答

Q1:奥卡姆剃刀原理?

A1:简单的东西才是最好的;

Q2:KNN的思想?欠拟合和过拟合在KNN中的体现?

A2:

Q3:这里尝试把for输出的数经过distance计算,存储到一个数组里面去

distance =  np.sqrt( (i-data_new)[0] ** 2 + (i-data_new)[1] ** 2 )  for i in data_X  ,哪里有错误?

A3:这里需要将中括号括起来,否则 distance 不是一个数组

distance =  [ np.sqrt( (i-data_new)[0] ** 2 + (i-data_new)[1] ** 2 )  for i in data_X ]

ps,这个语法和基本的创建数组是一样的: a = [ x for x in range(0,3) ]

Q3.1:我通过sklearn中的什么函数可以生成自定义的这种数据集?(答案中有代码,生成数据集的常用方式)

A3.1:生成几个blob数据聚集,并用散点图表示(using sklearn.datasets.make_blobs()

from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt# 设置随机种子以获得可重复的结果
random_state = 42# 生成三个blob数据
# centers: 每个blob的中心点
# cluster_std: 每个blob的标准差,控制blob的扩散程度
centers = [[-5, 5], [0, 0], [5, -5]]
cluster_std = [1.5, 0.5, 1.0]# 生成数据
X, y = make_blobs(n_samples=300, centers=centers, cluster_std=cluster_std, random_state=random_state)# 可视化生成的数据
plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='viridis')
plt.title('Generated Blobs')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.show()

Q4:利用sklearn的库进行KNN分类,其X_train,y_train 和 data_new 的数据类型分别是什么?

A4:X_train,y_train 特别的用大小写做了区分,一般X_train是切分后的训练集的数据,y_train是训练集的tag

而 data_new 是一个 ndarry 形式,或者是 ndarry 数组形式的,准备对齐进行分类的数据

Q5:这两个方法分别是干什么用的?哪些数据会使用到这类函数?

A5:打乱数据。需要注意的是,一般我们不会去破坏X和y,打乱的时候我们主要还是尝试去打乱

Q6:数据集切分的用法?

A6:

Q7:有一段KNN算法代码:

A7:

对于参数weight

        'uniform':所有邻居的权重相同,不考虑它们与查询点的距离。

        'distance':权重与距离成反比,即距离查询点越近的邻居对最终决策的影响越大。

对于参数 p(明氏距离):

        当p = 1时,使用的是曼哈顿距离(Manhattan distance),也称为城市街区距离,适用于各个维度的数值差异。(二维就是x+y,走直线)

        当p = 2时,使用的是欧几里得距离(Euclidean distance),这是最常见的距离度量方式,适用于连续数据。

        当p值更大时,更注重远距离的影响,即距离查询点较远的邻居对决策的影响更大。p→∞时叫切比雪夫距离。

Q8:什么是网格搜索?

A8:

Q9:通过sklearn划分数据集?其中最主要的函数是哪个?

A9:train_test_split

        X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

        testsize:训练集的占比,这个也同样可以用 train_size 进行代替

        X 是特征数据集。

        y 是目标变量,即标签数据。

        random_state 代表随机数 seed

Q10:模型评估的以下几个函数中 .fit 方法应该在哪个位置?简单得到score的方法?模型评估的底层实现?

A10:knn分类中如果要做预测,直接在实例化分类器之后 fit 即可

简单方法:可以直接对 classifier.score 进行查询。模型评估的本质就是 check 验证集的predict结果和real结果的相同比例

Q11:如何使用sklearn的库进行超参数搜索?(一句话,用什么接口进行网格搜索?)

A11:scikit-learn(简称sklearn)中,进行超参数搜索时,通常不会直接使用测试集数据

超参数搜索中,GridSearchCV即网格搜索,其实就是遍历所有的params_grid组合(内部嵌套几个for循环实现)

可以注意到,params_grid要求以字典形式定义,其中的诸多变量应该以“可迭代”的变量类型出现,以便可枚举。

sklearn中,可以使用 GridSearchCV RandomizedSearchCV 等工具来进行超参数搜索,它们都内置了交叉验证机制,可以在不使用测试集的情况下帮助找到最佳的超参数组合。一旦确定了最佳超参数,就可以使用整个训练集(包括之前用作验证集的部分)来训练最终模型,然后使用测试集来评估其性能。

Q12:归一化有关问题:StandardScaler

A12:在进行训练集

1)X-min / max-min; X-μ / σ; 这里的 μ 可以通过 np.mean 求得,σ可以通过 np.std 获得

2)关键编码:

from sklearn.preprocessing import StandardScaler

standard_scaler = StandardScaler()    # 实例化

standard scaler.fit(X)

x_train=standardScaler.transform(x_train)# 归一化

3)陷阱问题:

Q13:knn中分类问题转化为回归问题,决策规则由分类表决变成了均值法,why?

        K-近邻(K-Nearest Neighbors, KNN)算法是一种基于实例的学习算法,它通过测量不同特征值之间的距离来进行分类或回归。在KNN中,分类问题和回归问题的处理方式略有不同,但基本原理相似。

1. KNN分类问题
        在KNN分类问题中,决策规则通常是“多数投票”(majority voting)。这意味着算法会找出测试样本的K个最近邻居,然后根据这些邻居的类别来进行投票,选择出现次数最多的类别作为测试样本的预测结果。

2. KNN回归问题
        在KNN回归问题中,决策规则变为计算这些K个最近邻居的输出值的均值。这是因为在回归问题中,我们的目标是预测一个连续值,而不是分类问题中的离散标签。均值法可以提供一个平滑的预测值,它考虑了所有邻居的影响,而不是简单地选择一个类别。

Q14:knn的印象?优缺点?

A14:knn是奥卡姆剃刀原理的一个典例,简单粗暴;

问题是k难以确定,其计算量和存储要求都比较大,对于新数据到每个样本的d都必须求

Q15:线性算法中,三者分别属于分类任务还是狭义的回归任务?这两类任务有何不同?

A15:其中线性回归、多项式回归属于狭义的回归任务(找线),逻辑回归属于分类任务

Q16:data = datasets.load_iris() 如何取data的前20个数据样本?是不是 data[:20] ?

A16:# data.data 是一个二维数组,其中每一行代表一个样本的所有特征

        data_samples = data.data[:20]

Q17:最小二乘法是不是一种投票表决?

A17:最小二乘法并不是一种投票表决机制,而是一种数学优化技术。它主要用于统计学和数据分析中,用于拟合数据到一个数学模型。

Q18:最小二乘法的核心代码?

A18:

首先 x,y 经过预处理:

(array([5.1, 4.9, 4.7, 4.6, 5. , 5.4, 4.6, 5. , 4.4, 4.9, 5.4, 4.8, 4.8, 4.3, 5.8, 5.7, 5.4, 5.1, 5.7, 5.1]), array([1.4, 1.4, 1.3, 1.5, 1.4, 1.7, 1.4, 1.5, 1.4, 1.5, 1.5, 1.6, 1.4, 1.1, 1.2, 1.5, 1.3, 1.4, 1.7, 1.5]))

之后编码:

x_mean = np.mean(x)
y_mean = np.mean(y)# 计算a的分子和分母
a_top = sum((xi - x_mean) * (yi - y_mean) for xi, yi in zip(x, y))
a_bottle = sum((xi - x_mean) ** 2 for xi in x)# 计算斜率a和截距b
a = a_top / a_bottle
b = y_mean - a * x_mean

Q19:.reshape(-1,1) 的核心含义是什么?为什么这里写一个 -1 ?

A19:

Q20:MSE和RMSE?这俩一般用模型评估吗?

A20:MSE(均方误差,Mean Squared Error)和RMSE(均方根误差,Root Mean Squared Error)都是衡量一个模型预测值与实际观测值之间差异的统计量,常用于评估回归分析中的模型性能。不过更重要的,MSE/RMSE和MAE一起更容易被当做loss函数使用

Q21:R2 具体的好处?

A21:R^2也是模型评估方法,消除了量纲上的影响,不与本身取值大小相关,实现了归一化;

并且正相关,可以判定有多么拟合。R2结果越大越好

甚至于,说sklearn线性回归模型,自带的模型评价方法就是r方

Q22:多项式回归的本质?

A22:转换成了有两个特征的线性回归的式子,多项式回归的本质就是为样本多添加一些特征进行升维

具体思路就是将式子中的x平方看成是一个特征x1将x看成是另一个特征x2...

之后就用线性回归的思路

Q23:如果在 plt.plot(x,y) 中,x是乱序的,怎么办?(假设之前有 y=x**2+3 已经一一对应上)

A23: plt.plot(np.sort(x),  y[ np.argsort(x) ])

Q24:model.coef_ , model.intercept_ 分别是什么意思

A24:回归代码。

model.coef_:

这是模型的系数(coefficients)向量k,它包含了线性模型中每个特征的权重。

model.intercept_:

这是模型的截距项(intercept)b,它代表了当所有特征都为零时,模型预测的目标值。

Q25:对于model = LinearRegression() 多项式回归,可以多用一下 model.predict(X_new) 方法

注意 X_new 应是一个列向量

A25:

对于多项式回归,可以多用一下.predict方法

Q26:sklearn中,多项式回归的API?  其中的一个参数是degree,代表什么?

A26:PolynomialFeatures(degree=N)  表示的是我们要为原来的这个数据样本添加最多几次幂相应的特征

Q27:逻辑回归

A27;逻辑回归方法对于二分类就是一个固定损失函数公式的方法,如下图。多分类时考虑OvO或者OvR

        逻辑回归最主要是一个带特征权重的回归方法,在机器学习和深度学习的背景下,都非常常用!

        逻辑回归本身是个线性分类器,特长是二分类。对每个样本,分类1和2各自的概率 p1 p2 会通过式子求出

Q28:逻辑回归中的 “正则化” 是什么意思?(regularization)

A28:在原有的损失函数上加点东西不就行了吗,就是这么朴素的思想。起了个名字 regularization,

会让模型变得更加的稳定从而有效的避免过拟合现象,过滤掉不靠谱的特征。正则化的模型称之为范式,有L1正则化和L2正则化,其中L2-ridge回归更加平滑

Q29:多分类问题:OvO和OvR

A29

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/385569.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024世界技能大赛某省选拔赛“网络安全项目”B模块--操作系统取证解析

2024世界技能大赛某省选拔赛“网络安全项目”B模块--操作系统取证解析 任务一、操作系统取证解析:总结:任务一、操作系统取证解析: A 集团某电脑系统被恶意份子攻击并控制,怀疑其执行了破坏操作,窃取了集团内部的敏感信息,现请分析 A 集团提供的系统镜像和内存镜像,找到…

机会性加密技术:网络安全的新趋势

在当今数字化时代,网络安全已成为各行各业不可忽视的重要议题。随着网络攻击手段的不断演进,传统的加密方式已难以满足复杂多变的安全需求。机会性加密技术(Opportunistic Encryption,简称OE),作为一种新兴…

基于Qt的视频剪辑

在Qt中进行视频剪辑可以通过多种方式实现,但通常需要使用一些额外的库来处理视频数据。以下是一些常见的方法和步骤: 使用FFmpeg FFmpeg是一个非常强大的多媒体框架,可以用来处理视频和音频数据。你可以使用FFmpeg的命令行工具或者其库来实现…

skynet 入门篇

文章目录 概述1.实现了actor模型2.实现了服务器的基础组件 环境准备centosubuntumac编译安装 ActorActor模型定义组成 Actor调度工作线程流程工作线程权重工作线程执行规则 小结 概述 skynet 是一个轻量级服务器框架,而不仅仅用于游戏; 轻量级有以下几…

react18+

主要是围绕函数式组件讲,18主要用就是函数式组件,学习前先熟悉下原生js的基本使用,主要是事件 1、UI操作 1.1、书写jsx标签语言 基本写法和原生如同一则,只是放在一个方法里面返回而已,我们称这样的写法为函数式组件…

ChatTTS(文本转语音) 一键本地安装爆火语音模型

想不想让你喜欢的文章,有着一个动听的配音,没错,他就可以实现。 ChatTTS 是一款专为对话场景设计的文本转语音模型,例如 LLM 助手对话任务。它支持英语和中文两种语言。 当下爆火模型,在Git收获23.5k的Star&#xff…

面试重点---快速排序

快排单趟 快速排序是我们面试中的重点,这个知识点也很抽象,需要我们很好的掌握,而且快速排序的代码也是非常重要,需要我们懂了还不行,必须要手撕代码,学的透彻。 在研究快速排序之前,我们首先…

PyTorch 2.0 GPU Nvidia运行库的安装

【图书推荐】《PyTorch深度学习与计算机视觉实践》-CSDN博客 假设读者电脑带有NVIDIA 20 以上系列的显卡。 我们以CUDA 11.7cuDNN 8.2.0(其他更高版本的组合,读者可以执行查阅PyTorch官网获得)为例,讲解PyTorch 2.0 GPU版本的安…

【Linux】多线程4——线程同步/条件变量

1.Linux线程同步 1.1.同步概念与线程饥饿问题 先来理解同步的概念 什么是线程同步 在一般情况下,创建一个线程是不能提高程序的执行效率的,所以要创建多个线程。但是多个线程同时运行的时候可能调用线程函数,在多个线程同时对同一个内存地…

云服务器Ubuntu18.04进行Nginx配置

云服务器镜像版本信息:Ubuntu 18.04 server 64bit,本文记录了在改版本镜像上安装Nginx,并介绍了Nginx配置文件目录,便于后面再次有需求时进行复习。 文章目录 Nginx的安装Nginx配置文件分析 Nginx的安装 1.执行下面命令进行安装…

linux 部署flask项目

linux python环境安装: https://blog.csdn.net/weixin_41934979/article/details/140528410 1.创建虚拟环境 python3.12 -m venv .venv 2.激活环境 . .venv/bin/activate 3.安装依赖包(pip3.12 install -r requirements.txt) pip3.12 install -r requirements.txt 4.测试启…

使用git命令行的方式,将本地项目上传到远程仓库

在国内的开发环境中,git的使用是必不可少的。Git 是一款分布式版本控制系统,用于有效管理和追踪文件的变更历史及协作开发。本片文章就来介绍一下怎样使用git命令行的方式,将本地项目上传到远程仓库,虽然现在的IDE中基本都配置了g…

React类组件生命周期与this关键字

类组件生命周期 参考链接 一图胜千言(不常用的生命周期函数已隐藏) 代码: //CC1.js import { Component } from "react";export default class CC1 extends Component {constructor(props) {super(props);console.log("con…

人工智能算法工程师(高级)课程8-图像分割项目之Mask-RCNN模型的介绍与代码详解

大家好,我是微学AI,今天给大家介绍一下人工智能算法工程师(高级)课程8-图像分割项目之Mask-RCNN模型的介绍与代码详解。Mask R-CNN模型是一种广泛应用于目标检测和实例分割的任务的深度学习框架。本文将详细介绍Mask R-CNN的原理,包括Box Regression、Classification和Mask …

追问试面试系列:开篇

我们不管做任何事情,都是需要个理由,而不是盲目去做。 为什么写这个专栏? 就像我们被面试八股文时,市面上有很多面试八股文,随便一个八股文都是500,甚至1000面试题。诸多面试题,难道我们需要一…

Node Js开发环境的搭建

前言 通过自动化繁琐的设置和配置工作,帮助开发者快速启动新项目。常见的Node脚手架工具包括Yeoman、Express Generator、Create React App等。 一、什么是脚手架 1、什么是脚手架? 脚手架在软件开发中指的是一种自动化工具或脚本,用于快速创…

谷粒商城实战笔记-72-商品服务-API-属性分组-获取分类属性分组

文章目录 一,后端接口开发Controller层修改接口接口测试 二,前端开发 这一节的内容是开发获取分类属性分组的接口。 一,后端接口开发 Controller层修改接口 修改AttrGroupController接口。 RequestMapping("/list/{catelogId}")p…

【算法/训练】:动态规划(线性DP)

一、路径类 1. 字母收集 思路: 1、预处理 对输入的字符矩阵我们按照要求将其转换为数字分数,由于只能往下和往右走,因此走到(i,j)的位置要就是从(i - 1, j)往下走&#…

【Go系列】Go的UI框架Fyne

前言 总有人说Go语言是一门后端编程语言。 Go虽然能够很好地处理后端开发,但是者不代表它没有UI库,不能做GUI,我们一起来看看Go怎么来画UI吧。 正文 Go语言由于其简洁的语法、高效的性能和跨平台的编译能力,非常适合用于开发GUI…

鸿蒙应用框架开发【dlopen加载so库并获取Rawfile资源】 NDK

dlopen加载so库并获取Rawfile资源 介绍 本示例中主要介绍在TaskPool子线程中使用dlopen加载so库,以及如何使用Native Rawfile接口操作Rawfile目录和文件。功能包括文件列表遍历、文件打开、搜索、读取和关闭Rawfile。 效果预览 使用说明 应用界面中展示了Rawfil…