目录
🔍 1. 对于非齐次线性模型 ,试将其表示为齐次线性模型形式。
🔍 2. 某汽车公司一年内各月份的广告投入与月销量数据如表3-28所示,试根据表中数据构造线性回归模型,并使用该模型预测月广告投入为20万元时的销量。
🔍 3. 使用表3-28中的数据集构造线性分类器,并预测月广告投入为13.5万元时月销量能否达到1.5万辆。
🔍 4. 线性判别分析的基本思想是什么?此类方法能达到什么样的效果?
🔍 5. ID3、C4.5和CART决策树分别是以哪个指标进行分裂的?为什么通常情况下C4.5决策树的泛化性能要优于ID3决策树?
🔍 6. 分别说明信息熵、信息增益、信息增益率的概念,并说明这些指标的意义。
🔍 7. 试使用信息增益作为判别标准,对如表3-29所示的数据集进行一次划分。
🔍 8. 试使用信息增益率作为判别标准,对如表3-29所示的数据集进行一次划分。
编辑编辑🔍 9. 试分析基尼指数为何可用于度量数据集的纯度。
🔍 11. 已知数据集D中的数据维度为d,这些数据分属两类,若根据该数据集构造决策树,试证明得到的决策树树高不超过d+1。编辑编辑
编辑🔍 12. 现有如表3-30所示的客户信息数据集,试根据该数据集构造一棵用于判断是否提供贷款的ID3决策树。
🔍 13. 根据表3-30中的数据集构造一棵用于判断是否提供贷款的C4.5决策树。
🔍 14. 说明CART决策树的结构特点并分析CART决策树与ID3、C4.5决策树的区别。编辑编辑
🔍 15. 根据表3-30中的数据构造一棵用于判断是否提供贷款的无剪枝CART决策树。
🔍 16. 使用表3-28中的数据集构造一棵用于预测销量的最小二乘回归树。
🔍 18. 朴素贝叶斯分类器、半朴素贝叶斯分类器的假设前提分别是什么?
🔍 19. 根据表3-30中的数据集构造一个用于判断是否提供贷款的朴素贝叶斯分类器。
🔍 20. 假设表3-30中数据集的其他属性均依赖于“年龄”,试根据该数据集构造一判断是否提供贷款的半朴素贝叶斯分类器。
🔍 22. 支持向量机中的分离超平面是如何确定的?支持向量与分离超平面之间存在何关系?
编辑编辑编辑编辑🔍 23. 试举例说明核函数技术为何能实现数据升维。
🔍 24. 试查阅资料并说明,除了支持向量机之外哪些方法中还用到了核函数技术?
1. 核岭回归(Kernel Ridge Regression)
4. 核K均值聚类(Kernel K-Means Clustering)
5. 核Fisher判别分析(Kernel Fisher Discriminant Analysis, KFDA)
6. 核神经网络(Kernel Neural Networks)
7. 核极限学习机(Kernel Extreme Learning Machine, Kernel ELM)
9. 核偏最小二乘(Kernel Partial Least Squares, Kernel PLS)
10. 核密度估计(Kernel Density Estimation, KDE)
🔍 25. 事实上,支持向量机是一种度量学习模型,试查阅资料并说明度量学习中还有哪些经典的机器学习模型。
1. K最近邻(K-Nearest Neighbors, KNN)
2. 大边界最近邻(Large Margin Nearest Neighbor, LMNN)
3. 对比损失模型(Contrastive Loss Models)
4. 三元组损失模型(Triplet Loss Models)
6. 信息理论度量学习(Information Theoretic Metric Learning, ITML)
7. 核度量学习(Kernel Metric Learning)
8. 深度度量学习(Deep Metric Learning)
9. 正交距离判别分析(Orthogonal Distance Discriminant Analysis, ODDA)
🔍 1. 对于非齐次线性模型
,试将其表示为齐次线性模型形式。
神来之笔:非齐次线性模型可以通过扩展输入特征向量 X(增加一个额外维度且值固定为 1)转化为齐次线性模型。这个方法常用于机器学习模型的数学推导中,使公式更简洁统一。
上图展示了如何将原始特征向量 X 转化为扩展特征向量 X′:
- 蓝色箭头代表原始特征向量 X 的方向。
- 绿色虚线箭头表示偏置项,通过扩展特征空间加入一个固定值为 1 的维度。
- 红色箭头是扩展后的特征向量 X′,将原始特征和偏置结合到一个齐次表示中。
🔍 2. 某汽车公司一年内各月份的广告投入与月销量数据如表3-28所示,试根据表中数据构造线性回归模型,并使用该模型预测月广告投入为20万元时的销量。
表3-28 月广告投入与月销量数据表
月份 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|
月广告投入(万元) | 9.95 | 10.14 | 9.22 | 8.87 | 12.06 | 16.30 |
月销量(万辆) | 1.018 | 1.143 | 1.036 | 0.915 | 1.373 | 1.640 |
月份 | 7 | 8 | 9 | 10 | 11 | 12 |
月广告投入(万元) | 17.01 | 18.93 | 14.01 | 13.01 | 15.41 | 14.21 |
月销量(万辆) | 1.886 | 1.913 | 1.521 | 1.237 | 1.601 | 1.496 |
我们需要根据给定的广告投入与销量数据,构造一个线性回归模型。线性回归的数学形式是:
其中:
- y表示预测的销量;
- x表示广告投入;
- w 和 b是模型的参数(分别为斜率和截距)。
目标是利用历史数据拟合出模型 w 和 b,并预测当广告投入为 20 万元时的销量。
代码:
import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression
# Input data from the table
data = {
"广告投入": [9.95, 10.14, 9.22, 8.87, 12.06, 16.30, 14.01, 13.01, 15.41, 14.21, 17.01, 18.93],
"销量": [1.018, 1.143, 1.036, 0.915, 1.373, 1.640, 1.521, 1.237, 1.601, 1.496, 1.886, 1.913],
}
# Create a DataFrame
df = pd.DataFrame(data)
# Prepare data for regression
X = np.array(df["广告投入"]).reshape(-1, 1)
y = np.array(df["销量"])
# Fit linear regression model
model = LinearRegression()
model.fit(X, y)
# Predict for advertising input of 20万元
ad_input = np.array([[20]])
predicted_sales = model.predict(ad_input)[0]
# Model coefficients and intercept
coefficients = model.coef_[0]
intercept = model.intercept_
# Display results and dataset summary to the user
results = {
"线性回归方程": f"y = {coefficients:.4f} * x + {intercept:.4f}",
"预测广告投入为20万元时的销量": predicted_sales,
}
import ace_tools as tools; tools.display_dataframe_to_user(name="广告投入与销量分析数据", dataframe=df)
results
得到结果:
🔍 3. 使用表3-28中的数据集构造线性分类器,并预测月广告投入为13.5万元时月销量能否达到1.5万辆。
表3-28 月广告投入与月销量数据表
月份 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|
月广告投入(万元) | 9.95 | 10.14 | 9.22 | 8.87 | 12.06 | 16.30 |
月销量(万辆) | 1.018 | 1.143 | 1.036 | 0.915 | 1.373 | 1.640 |
月份 | 7 | 8 | 9 | 10 | 11 | 12 |
月广告投入(万元) | 17.01 | 18.93 | 14.01 | 13.01 | 15.41 | 14.21 |
月销量(万辆) | 1.886 | 1.913 | 1.521 | 1.237 | 1.601 | 1.496 |
# Re-import necessary libraries
import pandas as pd
import numpy as np
from sklearn.linear_model import LogisticRegression
# Recreate the dataset from the original problem
data = {
"广告投入": [9.95, 10.14, 9.22, 8.87, 12.06, 16.30, 14.01, 13.01, 15.41, 14.21, 17.01, 18.93],
"销量": [1.018, 1.143, 1.036, 0.915, 1.373, 1.640, 1.521, 1.237, 1.601, 1.496, 1.886, 1.913],
}
# Create a DataFrame
df = pd.DataFrame(data)
# Step 1: Create classification labels (1 if sales >= 1.5, else 0)
df["分类"] = (df["销量"] >= 1.5).astype(int) # 1 for sales >= 1.5, 0 otherwise
# Step 2: Prepare data for classification
X_class = np.array(df["广告投入"]).reshape(-1, 1) # Feature: Advertising Input
y_class = np.array(df["分类"]) # Label: Sales Classification
# Step 3: Train a logistic regression classifier
classifier = LogisticRegression()
classifier.fit(X_class, y_class)
# Step 4: Predict for advertising input of 13.5万元
ad_input_class = np.array([[13.5]])
predicted_class = classifier.predict(ad_input_class)[0]
probability = classifier.predict_proba(ad_input_class)[0][1]
# Model coefficients and intercept
class_coefficients = classifier.coef_[0][0]
class_intercept = classifier.intercept_[0]
# Results
classification_results = {
"线性分类器方程": f"f(x) = {class_coefficients:.4f} * x + {class_intercept:.4f}",
"广告投入为13.5万元时的预测类别": "销量达到1.5万辆 (类别1)" if predicted_class == 1 else "销量未达1.5万辆 (类别0)",
"达到1.5万辆的概率": f"{probability:.4%}",
}
import ace_tools as tools; tools.display_dataframe_to_user(name="广告投入与销量分类数据", dataframe=df)
classification_results
import numpy as np
import pandas as pd
# 数据提取
ad_investment = np.array([9.95, 10.14, 9.22, 8.87, 12.06, 16.30, 17.01, 18.93, 14.01, 13.03, 15.41, 14.21])
sales = np.array([1.018, 1.143, 1.036, 0.915, 1.373, 1.640, 1.886, 1.913, 1.521, 1.237, 1.601, 1.496])
# 将销量划分为两类
labels = np.where(sales >= 1.5, 1, 0)
# 均值计算
x_mean = np.mean(ad_investment)
y_mean = np.mean(labels)
# 计算斜率 w 和截距 b
w = np.sum((ad_investment - x_mean) * (labels - y_mean)) / np.sum((ad_investment - x_mean) ** 2)
b = y_mean - w * x_mean
# 构建分类器函数
def classify(x, w, b):
return 1 if (w * x + b) >= 0 else 0
# 对广告投入为 13.5 的情况进行预测
ad_to_predict = 13.5
predicted_class = classify(ad_to_predict, w, b)
# 显示结果
w, b, predicted_class
-
线性分类器方程:
-
预测结果:
- 当广告投入为 13.5万元时,预测销量 未达到 1.5 万辆(类别 0)。
- 达到 1.5 万辆销量的概率为 33.34%。
🔍 4. 线性判别分析的基本思想是什么?此类方法能达到什么样的效果?
- 基本思想:通过最大化类间散度与类内散度的比值,找到一个最优投影方向,使得不同类别的数据在低维空间中尽可能分离。
- 分类效果:适合线性可分数据,能有效增强低维空间中的类别分布清晰度,便于分类。
- 降维效果:在保持类别间差异的同时,大幅降低数据维度,提高计算效率和模型泛化能力。
🔍 5. ID3、C4.5和CART决策树分别是以哪个指标进行分裂的?为什么通常情况下C4.5决策树的泛化性能要优于ID3决策树?
- 分裂指标:
- ID3 使用信息增益。
- C4.5 使用增益率。
- CART 使用基尼指数(分类)或均方误差(回归)。
- 泛化性能:C4.5 决策树的泛化能力优于 ID3 决策树,主要因为它改进了分裂指标、支持连续值处理和剪枝策略,减少了过拟合的可能性。
1. 增益率的改进
- 问题:
- ID3 决策树使用信息增益作为分裂指标,但信息增益会偏向于选择取值较多的属性(比如“身份证号”这种唯一标识)。
- 这种偏好可能导致过拟合,泛化能力较差。
- 改进:
- C4.5 决策树通过使用增益率(信息增益的归一化形式),对属性的固有偏好进行了惩罚,降低了取值多的属性对分裂的偏好。
2. 支持连续值
- ID3 决策树只能处理离散型属性,而 C4.5 决策树支持连续值分裂(如通过将连续值分裂成 "小于某值" 和 "大于某值" 的区间)。
- 连续值的支持使得 C4.5 决策树在现实数据中的应用更加灵活和准确。
3. 剪枝策略
- C4.5 决策树在训练后加入了剪枝策略,通过降低树的复杂度来提高泛化性能,而 ID3 决策树不具备这种剪枝机制。
4. 应用范围更广
- C4.5 决策树能够处理缺失值和不平衡数据,而 ID3 决策树的这些能力较弱。
🔍 6. 分别说明信息熵、信息增益、信息增益率的概念,并说明这些指标的意义。
指标之间的关系与区别
-
关系:
- 信息增益衡量划分后的信息提升。
- 信息增益率是在信息增益的基础上进行归一化,用于克服信息增益的偏好。
-
区别:
- 信息熵 衡量当前系统的不确定性。
- 信息增益 衡量划分前后系统不确定性的减少。
- 信息增益率 考虑了属性取值的多样性,对多值属性进行了惩罚。
这些指标的意义
- 信息熵:帮助理解样本集的纯度,是信息增益和信息增益率的基础。
- 信息增益:直接衡量属性的区分能力,指导决策树分裂。
- 信息增益率:提供公平的分裂标准,避免信息增益偏向多值属性,提高泛化性能。
🔍 7. 试使用信息增益作为判别标准,对如表3-29所示的数据集进行一次划分。
表3-29 天气数据集
编号 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|
湿度情况 | 干燥 | 干燥 | 干燥 | 潮湿 | 潮湿 | 潮湿 |
温度情况 | 高温 | 低温 | 适宜 | 高温 | 低温 | 适宜 |
天气情况 | 晴朗 | 晴朗 | 阴雨 | 阴雨 | 晴朗 | 阴雨 |
🔍 8. 试使用信息增益率作为判别标准,对如表3-29所示的数据集进行一次划分。


🔍 9. 试分析基尼指数为何可用于度量数据集的纯度。
基尼指数通过衡量数据集中样本类别的不一致性来反映纯度,其核心在于:
-
对类别概率分布的敏感性:
- 当某个类别的概率
接近 1 时,其他类别的概率趋于 0,基尼指数趋于 0,表示数据集几乎全部属于一个类别,纯度高。
- 当所有类别的概率
接近均匀分布时,基尼指数较高,表示数据分布混乱,纯度低。
- 当某个类别的概率
-
基于平方惩罚减少误差:基尼指数的公式中,类别概率
表示类别的重要性,平方项让高概率类别的贡献更大,而低概率类别的贡献更小。因此,基尼指数对不平衡分布的数据更敏感。
-
可度量数据集划分的效果:划分数据集后,基尼指数反映了划分后子集的纯度变化。若划分使得子集基尼指数降低(纯度提升),则划分被认为是有意义的。
基尼指数通过衡量类别分布的不一致性和概率的均匀程度来反映数据集的纯度:
- 基尼指数越小,数据集越纯,类别越单一。
- 基尼指数越大,数据集中类别分布越混乱,纯度越低。
对于一个样本集合 D,假设有 K 个类别,其基尼指数公式为:
其中:
是样本属于第 iii 类的概率(即该类别样本数占总样本数的比例)。
特性:
越接近 1,其他类别的
(
)越接近 0,基尼指数越小,表示数据集纯度越高。
越均匀,基尼指数越大,表示数据集纯度越低。
🔍 10. 预剪枝和后剪枝存在哪些相同点,又存在哪些差异?
相同点:
-
目标一致:
- 两者的目标都是通过简化决策树的结构来提高模型的泛化能力,避免过度拟合训练数据。
-
应用场景一致:
- 都适用于决策树生成过程中的剪枝策略,