机器学习笔记-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

  • 30
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值