数据挖掘 概述
第一章 数据挖掘介绍
-
哪些算法是有监督学习,无监督学习,各自特点?
答案:有监督分为分类和回归两类,无监督学习主要为聚类和降维
算法名称 算法类型 特点 决策树Decision Tree 有监督既可作分类也可做回归 决策树的结果容易理解和解释,因为它们模仿了人类的决策过程,使用类似于流程图的树状结构 逻辑回归Logistic Regression 线性有监督分类 逻辑回归是一种简单且计算高效的分类算法,主要用于二分类问题,输出结果可解释性强,表现为概率形式。它基于线性组合的特征通过Sigmoid函数映射到0到1之间,适合处理线性可分数据,但在处理非线性关系时效果不佳。 支持向量机(SVM) 有监督 最大化间隔:SVM寻找分类边界(超平面)以最大化不同类别之间的距离。 非线性映射:通过核技巧处理非线性可分数据,映射到高维空间进行分类。 K-meansK近邻算法 聚类无监督 是一种迭代的聚类算法,通过最小化簇内成员与簇中心的距离平方和来形成k个簇,适用于球形、大小相似的簇,需预先指定簇的数量k。 DBSCAN 聚类无监督 基于密度的聚类算法,自动发现任意形状的簇,通过测量点的密度来确定核心点和边界点,能识别并排除噪声点,无需预设簇的数量 PCA主成分分析 降维 通过线性变换将高维数据投影到低维空间,同时保留数据的大部分方差,生成的主成分彼此正交,减少计算复杂度和冗余。 。。。 -
“过拟合”是什么意思?
答案:过拟合指模型在训练数据上表现优异,但在新数据上性能下降的现象,因模型学习了训练数据的噪声而非普遍规律。
-
正则化是什么意思?目的是什么?
答案:正则化是在数据挖掘中通过在损失函数中添加惩罚项来防止模型过拟合的技术,旨在提升模型的泛化能力,确保模型在未见数据上的表现。它通过限制模型的复杂度来达成这一目标,常见的方法有L1和L2正则化。 举个例子:想象你在教一个小孩子识别苹果和橙子。开始时,你只给他看非常典型的苹果和橙子——红红圆圆的苹果,橙色光滑的橙子。小孩很快就学会了区分它们。但是,如果每次你给他的苹果都是红色的,他可能会认为所有红色的东西都是苹果。这就是过拟合——模型(小孩)对训练数据(你给他的苹果和橙子)过度适应,以至于无法正确处理新情况(比如黄色的苹果或橙色的胡萝卜)。
正则化就像是告诉小孩:“不要只是记住这些苹果的样子,要学习它们更本质的特征。”这样,即使遇到不同颜色或形状的苹果,小孩也能识别出来。同样,正则化使模型关注数据的普遍规律,而不仅仅是记忆训练数据的细节,从而提高其对新数据的适应能力。
第二章 回归分析
-
哪些算法属于回归,各自的特点已经应用场景
**答案:**回归算法主要用于预测连续数值型的目标变量,以下是一些常见的回归算法及其特点和应用场景:
- 线性回归(Linear Regression)
- 特点:假设自变量和目标变量间存在线性关系,通过最小化预测值与真实值间的平方误差来拟合最佳直线。y=kx+b
- 应用场景:预测房价、销售量预测、经济增长预测等。
- 岭回归(Ridge Regression)
- 特点:线性回归的变种,引入了L2正则化,有助于解决多重共线性和过拟合问题。
- 应用场景:基因表达数据中的基因选择,具有大量特征的数据集。
- Lasso回归(Least Absolute Shrinkage and Selection Operator)
- 特点:线性回归的另一种变种,引入了L1正则化,可以将一些不重要的特征的权重压缩至零,实现特征选择。
- 应用场景:特征选择,特别是在特征数量远大于样本数量的情况下。
- 弹性网络回归(Elastic Net Regression)
- 特点:结合了L1和L2正则化,既能处理多重共线性,又能进行特征选择。
- 应用场景:高维数据的回归分析,例如基因组学研究。
- 决策树回归(Decision Tree Regression)
- 特点:使用树结构进行预测,通过分割数据空间来逼近目标变量。
- 应用场景:预测电力消耗、医疗费用预测。
- 随机森林回归(Random Forest Regression)
- 特点:集合多个决策树的预测,减少过拟合,提高预测稳定性。
- 应用场景:金融风险评估、天气预报。
- 梯度提升回归树(Gradient Boosting Regression Trees, GBRT)
- 特点:通过逐步添加弱预测模型(通常是决策树)来改进预测,减少偏差。
- 应用场景:预测股票市场波动、用户行为预测。
- 支持向量回归(Support Vector Regression, SVR)
- 特点:基于支持向量机原理,寻找一个最优的边界来最大化数据点与边界之间的距离。
- 应用场景:时间序列预测、化学物质属性预测。
- 线性回归(Linear Regression)
-
回归问题的应用场景,作用以及评价指标(R^2、回归误差)
-
决定系数(Coefficient of Determination, R²)
-
定义:模型预测值与真实值相关性的度量,表示模型解释了数据中多少变异。
-
解释:R² 取值范围在 -∞ 到 1 之间,越接近 1 表示模型拟合得越好。
-
公式:
R 2 = 1 − ∑ i = 1 n ( y i − y ^ i ) 2 ∑ i = 1 n ( y i − y ˉ ) 2 R^2 = 1 - \frac{\sum_{i=1}^{n}(y_i - \hat{y}_i)^2}{\sum_{i=1}^{n}(y_i - \bar{y})^2} R2=1−∑i=1n(yi−yˉ)2∑i=1n(yi−y^i)2
-
-
调整后的决定系数(Adjusted R²)
-
定义:R² 的修正版本,考虑了模型自由度的影响。
-
解释:调整后的 R² 通常用于有多重自变量的模型,以惩罚过多的自变量。
-
公式:
A d j u s t e d R 2 = 1 − ( 1 − R 2 ) n − 1 n − p − 1 Adjusted\ R^2 = 1 - (1-R^2)\frac{n-1}{n-p-1} Adjusted R2=1−(1−R2)n−p−1n−1
-
-
-
回归算法的完整代码
# 导入所需的库 from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn import metrics import pandas as pd # 加载数据集 data = pd.read_csv('data.csv') # 请替换为你的数据集路径 # 定义特征和目标变量 X = data[['feature1', 'feature2', 'feature3']] # 请替换为你的特征列名 y = data['target'] # 请替换为你的目标列名 # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0) # 创建线性回归模型 linear_regression = LinearRegression() # 训练模型 linear_regression.fit(X_train, y_train) # 预测测试集结果 y_pred = linear_regression.predict(X_test) # 计算均方误差 mse = metrics.mean_squared_error(y_test, y_pred) print('Mean Squared Error: {:.2f}'.format(mse))
第三章 分类算法(
-
哪些算法属于分类,各自的特点和应用场景
答:
分类算法在机器学习和数据挖掘中用于预测数据点属于哪一类别。以下是一些常见的分类算法及其特点和应用场景: 1. 逻辑回归(Logistic Regression) - 特点:尽管名字中有“回归”,但实际上它是一种分类算法,特别适用于二分类问题。使用sigmoid函数将线性组合的输出转换为概率。 - 应用场景:信用评分、疾病诊断、客户流失预测等。 2. 决策树(Decision Trees) - 特点:通过递归地将数据集拆分成子集,形成树状结构。易于理解和可视化,能够处理数值和分类特征。 - 应用场景:客户细分、医疗诊断、故障检测。 3. 随机森林(Random Forest) - 特点:由多个决策树组成,通过投票机制进行分类,减少了过拟合风险,提高了预测的稳定性。 - 应用场景:生物信息学、金融风险评估、图像识别。 4. 支持向量机(Support Vector Machine, SVM) - 特点:寻找一个超平面,使得两类数据的间隔最大化。对于高维空间中的分类问题特别有效。 - 应用场景:手写数字识别、文本分类、生物信息学。 5. K近邻算法(K-Nearest Neighbors, KNN) - 特点:基于实例的学习,根据新样本最近的K个邻居的类别来预测其类别。 - 应用场景:推荐系统、图像识别、异常检测。 6. 朴素贝叶斯(Naive Bayes) - 特点:基于贝叶斯定理,假设特征之间相互独立,适用于大规模数据集和实时预测。 - 应用场景:文本分类、情感分析、垃圾邮件过滤。 7. 神经网络(Neural Networks) - 特点:模仿人脑神经元结构,通过多层节点学习复杂的模式。能够处理非常复杂的非线性关系。 - 应用场景:语音识别、图像识别、自然语言处理。 8. 集成学习算法(Ensemble Methods) - 特点:结合多个模型的预测结果,如AdaBoost、Gradient Boosting、XGBoost,通过提升或袋装技术增强预测性能。 - 应用场景:几乎所有的分类问题,特别适用于提高模型的准确性和稳定性。 9. 深度学习(Deep Learning) - 特点:是神经网络的高级形式,使用多层非线性处理单元进行特征提取和变换,特别擅长处理高维数据。 - 应用场景:自动驾驶、医疗影像分析、游戏AI
-
分类算法的评价指标
1. 准确率(Accuracy) - 定义:分类正确的样本数占总样本数的比例。 - 计算公式: Accuracy= (TP+TN/TP+FP+FN+TN) - 适用场景:当类别分布均匀时较为适用。 2. 精确率(Precision) - 定义:预测为正类的样本中实际为正类的比例。 - 计算公式:Precision= (TP)/(TP+FP) 3. 召回率(Recall) - 定义:实际为正类的样本中被正确预测为正类的比例。 - 计算公式: 4. F1-Score - 定义:精确率和召回率的调和平均值,平衡两者。 - 计算公式:𝐹1=(2*P*R)/(P*R) 6. 混淆矩阵(Confusion Matrix) - 描述:是一个表格布局,显示了模型预测结果与实际结果的比较,包括真阳性(TP)、假阳性(FP)、真阴性(TN)和假阴性(FN)。 7. ROC曲线(Receiver Operating Characteristic Curve) - 描述:以假正率为横轴,以真正率为纵轴的曲线,展示了不同阈值下分类器的性能。
公式:
A c c u r a c y = T P + T N T P + F P + F N + T N Accuracy = \frac{TP + TN}{TP + FP + FN + TN} Accuracy=TP+FP+FN+TNTP+TNP r e c i s i o n = T P T P + F P Precision = \frac{TP}{TP + FP} Precision=TP+FPTP
R e c a l l = T P T P + F N Recall = \frac{TP}{TP + FN} Recall=TP+FNTP
| | 实际正类 | 实际负类 | 2|-------|----------|----------| 3| 预测正类 | TP | FP | 4| 预测负类 | FN | TN |
F 1 = 2 × P r e c i s i o n × R e c a l l P r e c i s i o n + R e c a l l F1 = \frac{2 \times Precision \times Recall}{Precision + Recall} F1=Precision+Recall2×Precision×Recall
-
SVM核函数的类型及相应的作用?
- 线性核(Linear Kernel)
- 公式:𝐾(𝑥,𝑥′)=𝑥⊤𝑥′K(x,x′)=x⊤x′
- 作用:适用于线性可分或近似线性可分的情况。在特征空间中,数据点可以通过一条直线(或在高维情况下的超平面)分开。线性核简单且计算效率高。
- 多项式核(Polynomial Kernel)
- 公式:𝐾(𝑥,𝑥′)=(𝑥⊤𝑥′+𝑐)𝑑K(x,x′)=(x⊤x′+c)d
- 作用:通过将数据映射到更高维的多项式空间来使非线性可分数据线性可分。参数 𝑐c 控制常数项,而 𝑑d 是多项式的阶次。多项式核适合于有明确的非线性边界的情况。
3.rbf偏非线性
- 线性核(Linear Kernel)
-
分类问题的完整代码(KNN最简单的)
# 导入必要的库 from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.neighbors import KNeighborsClassifier from sklearn.metrics import classification_report, confusion_matrix, accuracy_score # 加载数据集 iris = load_iris() X = iris.data y = iris.target # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 数据预处理:特征缩放 scaler = StandardScaler() scaler.fit(X_train) X_train = scaler.transform(X_train) X_test = scaler.transform(X_test) # 创建KNN分类器实例 指定初始质心 knn = KNeighborsClassifier(n_neighbors=3) # 使用训练集训练模型 knn.fit(X_train, y_train) # 对测试集进行预测 y_pred = knn.predict(X_test) # 评估模型 print("Confusion Matrix:") print(confusion_matrix(y_test, y_pred)) print("\nClassification Report:") print(classification_report(y_test, y_pred)) print("\nAccuracy Score:") print(accuracy_score(y_test, y_pred))
-
评估指标:(混淆矩阵、准确率、召回率)
见上
-
ROC曲线的作用
ROC曲线以假正率(False Positive Rate, FPR)为横轴,以真正率(True Positive Rate, TPR)为纵轴绘制,反映了分类器在不同阈值下的识别能力。以下是ROC曲线的三种主要作用:
- 评估分类器在不同阈值下的性能:
- ROC曲线可以展示分类器在所有可能的分类阈值下的性能。通常,分类器会输出一个连续的概率值,而ROC曲线通过改变这个概率阈值,从0到1之间变化,来描绘出一系列的FPR和TPR值。这有助于理解分类器在不同决策阈值下的误报率和命中率。
- 选择最优阈值:
- ROC曲线上的点代表了在特定阈值下的FPR和TPR。理想情况下,我们希望TPR高(意味着很少的正例被错分为负例),同时FPR低(意味着很少的负例被错分为正例)。ROC曲线接近左上角的点通常代表了最佳的阈值,此时模型的误报率最低,同时命中率最高。
- 比较不同分类器的性能:
- 当需要比较两个或多个分类器的性能时,可以将它们的ROC曲线绘制在同一坐标系中。分类器的性能可以通过观察其ROC曲线的形状来直观判断,通常越接近左上角的曲线代表性能越好的分类器。此外,可以通过计算ROC曲线下的面积(AUC,Area Under the Curve)来进行定量比较,AUC值越大,表示分类器的性能越好。
除了上述作用之外,ROC曲线还可以帮助识别分类器的过拟合或欠拟合情况,以及在不同数据子集上的表现一致性。ROC曲线和AUC是评估分类模型,尤其是在不平衡数据集上的表现时非常有用的工具。在实际应用中,ROC曲线常常用于医疗诊断、信用评分、垃圾邮件过滤等领域,以优化决策过程并减少错误分类的成本。
- 评估分类器在不同阈值下的性能:
-
朴素贝叶斯算法
朴素贝叶斯分类器的核心假设是特征条件独立性,这意味着在给定类别的条件下,所有特征之间相互独立。尽管特征独立的假设在现实世界中很少成立,因为特征间往往存在某种程度的相关性
先验概率:是指根据以往经验和分析得到的概率.
后验概率:事情已经发生,要求这件事情发生的原因是由某个因素引起的可能性的大小在分类问题中, B一般代表我们的X特征数据, A表示我们的类别数据. 我们把公式准换成我们更熟悉的XY表达式。 P(Y|X)就表示,在给定X属性值的前提下,Y取某种类别的概率。 举个例子,假设我们有用户的年龄和收入数据,比如一个用户,35岁,月收入4000美元。X 用户是否会买SUV-家庭用车是我们要预测的结果。Y 则P(Y|X) 表示在我们知道了用户35岁,月收入4000美元后,用户会买SUV的可能性。 而P(Y), 我们称之为先验概率,表示任一个用户,不管年龄、收入,或者其他属性,会买SUV的概率。 后验概率P(Y|X), 在先验概率P(Y)的基础上,获取到更多信息后而得到的概率。 我们有一个基础的先验概率,在获得更多有用的信息后,我们对Y发生的概率更有把握,这个更有把握的概率就是后验概率。 类似的, P(X|Y) 表示在得知了Y之后,X取值的后验概率。 也就是,我们知道一个用户买了SUV, 那这个用户年龄是35、收入是4000$的概率是多少。 P(X)是X的先验概率。在我们的例子中,就是我们拥有的用户群体X中,年龄是35、收入是4000$ 的用户的概率。不管有没有买SUV。
第四章 聚类算法
-
哪些算法属于聚类,各自的特点
答案:
- K均值聚类(K-Means)
- 特点:简单快速,适合大规模数据集。它通过迭代过程寻找数据点到聚类中心的平方误差之和最小化。需要预先设定聚类的数量k。
- 缺点:对初始聚类中心敏感,可能陷入局部最优解;假设聚类形状为球形且大小相似。基于划分,提前指定簇数
- 层次聚类(Hierarchical Clustering)
- 特点:可以产生嵌套的聚类结构,形成一棵树状图(树状图或 dendrogram)。分为凝聚型和分裂型两种。
- 缺点:计算复杂度较高,不适合大规模数据集。 大团体到小团体或从小团体到大团体
- DBSCAN(Density-Based Spatial Clustering of Applications with Noise)
- 特点:基于密度的聚类算法,可以发现任意形状的聚类。不需要预设聚类数量,能识别出噪声点。
- 缺点:对于不同密度区域的聚类效果不佳,参数(邻域半径和最小点数)的选择较为关键。 就像你让参加野餐的人自由散开,然后观察哪里人最多,自然形成的群体就是一个团队。这种方式下,团队的形状和大小完全由参与者的自然聚集决定
- K均值聚类(K-Means)
-
聚类问题的应用场景、作用、如何评估聚类效果
答:
应用场景
聚类分析在多个领域都有广泛的应用,包括但不限于:
- 市场营销:客户细分,帮助企业理解不同类型的客户群,以便制定针对性的营销策略。
- 生物学:基因表达数据分析,帮助科学家发现不同功能的基因组。
- 图像分析:图像分割,自动识别图像中的不同对象或区域。
- 社交网络分析:社区发现,识别社交媒体中的不同兴趣群体。
- 推荐系统:用户或物品聚类,提高推荐的准确性和个性化水平。
- 异常检测:识别数据集中的异常模式或行为,用于网络安全、金融欺诈检测等。
作用
- 数据简化:减少数据复杂性,通过聚类识别主要模式,使数据更容易理解和处理。
- 模式识别:发现数据中的隐藏结构或模式,帮助理解和解释数据。
- 决策支持:提供基于数据的见解,辅助决策者做出更明智的决策。
评估
- 外部方法:有监督的类标或者专家构建基准
- 内部方法:轮廓系数等等
-
一种聚类算法的算法过程(最简单的K-means算法)
K-means是最简单且广泛应用的聚类算法之一,其核心思想是将数据点划分为K个簇,使得簇内的数据点尽可能相似,而簇间的数据点尽可能不同。算法步骤如下:
- 初始化:随机选择K个数据点作为初始聚类中心。
- 分配数据点:将每个数据点分配给最近的聚类中心,形成K个簇。
- 更新聚类中心:重新计算每个簇的中心,通常是簇内所有点的平均值。
- 重复步骤2和3:直到聚类中心不再变化或达到最大迭代次数。
算法结束时,K-means会返回K个簇,每个簇包含一组数据点,以及对应的聚类中心。K-means算法简单有效,但在选择初始聚类中心和确定K值上需要额外考虑,以避免陷入局部最优解。
第五章 文本处理
-
名词解释 TF-IDF,词袋模型,词向量,命名实体识别
答案:
- TF-IDF:Term Frequency-Inverse Document Frequency,衡量词在文档中的重要性,TF表示词频,IDF反映文档频率的逆比例,高频低共现词权重高。
eg:假设我们有一系列科技新闻文章,想要找出每篇文章的主题关键词。对于一篇文章,"科技"这个词可能频繁出现,但在所有文章中也很常见,因此它的TF-IDF值不会特别高。然而,如果**“量子计算”这个词在一个特定文章中出现几次**,而在其他文章中很少或没有出现,那么这个词的TF-IDF值就会很高,表明它可能是这篇文章的一个关键主题。
- 词袋模型:忽略文本中词的顺序,仅考虑词的出现次数,将文本转换为词频或二进制向量表示,简化自然语言处理任务。
**eg:**想象一下,你正在分析大量电影评论,判断它们是正面还是负面的。使用词袋模型,你将每个评论转换成一个向量,其中每个维度对应词汇表中的一个词,数值表示该词在评论中出现的次数。例如,对于评论“这部电影太棒了”,模型会为“电影”、“太棒了”等词创建或增加相应的计数,而忽略词序。
- 词向量:将词映射为多维空间中的向量,捕捉词义和语法信息,如Word2Vec、GloVe,支持语义相似性计算和机器学习应用。
**eg:**考虑这样一个句子:“狗和猫跑得很快。”在词向量模型中,每个词如“狗”、‘猫🐱、’“跑”和“快”都被表示为多维空间中的向量。这些向量不仅反映了词的含义,还能捕捉到词与词之间的关系,例如,“狗”和“猫”的向量可能在某些维度上接近,因为它们共享“宠物”这一概念。
- 命名实体识别:识别文本中的人名、地名、组织机构等专有名词,是信息抽取和问答系统的关键技术,基于规则或机器学习方法实现。
**eg:**在一篇新闻报道中,如“美国总统乔·拜登在白宫签署了新的气候法案。”命名实体识别的任务是识别出“乔·拜登”是个人名,“白宫”是地点名,“美国”是国家名。这对于自动摘要、问答系统等NLP应用至关重要,因为它有助于理解文本的关键信息和上下文。
-
文本分类算法
答案:
-
朴素贝叶斯分类器(Naive Bayes Classifier)
- 利用概率理论,假设特征之间相互独立,适用于文本分类和情感分析。
-
支持向量机(Support Vector Machines, SVM)
- 寻找一个超平面,使得两类数据之间的间隔最大化,适用于小到中等规模的数据集。
-
决策树(Decision Trees)
- 通过一系列的属性测试来决定文本的分类,易于理解和解释。
-
K-最近邻算法(K-Nearest Neighbors, KNN)
- 根据新数据点与训练集中点的距离,选择最近的K个邻居进行分类。
-
人工神经网络(Artificial Neural Networks, ANN)
- 包括多层感知器(MLP),可以学习复杂的非线性关系。
-
深度学习算法:
-
卷积神经网络
(Convolutional Neural Networks, CNN)
- 用于处理序列数据,擅长捕捉局部特征和模式。
-
循环神经网络
(Recurrent Neural Networks, RNN)
- 特别适用于处理序列数据,如文本和语音,能够记住先前的信息。
-
长短时记忆网络
(Long Short-Term Memory, LSTM)
- 解决RNN的长期依赖问题,更好地处理长序列数据。
-
-
集成学习算法:
-
随机森林
(Random Forest)
- 多个决策树的集合,提高分类的准确性和稳定性。
-
AdaBoost
- 弱分类器的组合,通过迭代提升分类器性能。
-
Gradient Boosting Machines
(GBM)
- 包括Gradient Boosted Decision Trees(GBDT),XGBoost,LightGBM等,通过梯度提升构建强分类器。
-
-
基于规则的分类器
- 依赖预定义的规则,通常用于特定领域的文本分类。
-
Transformer模型(如BERT, RoBERTa, DistilBERT)
- 基于自注意力机制的深度学习模型,能够处理长文本,捕捉上下文依赖关系,适用于各种NLP任务。
这些算法的选择通常取决于数据集的大小、特征、计算资源以及所需的分类精度。深度学习方法在处理大规模数据和复杂模式时通常表现更佳,而传统的机器学习算法在数据集较小或计算资源有限时更为实用。
朴素贝叶斯文本分类例子
假设我们有一个电影评论数据集,其中包含评论文本和它们的情感标签(正面或负面)。我们的目标是训练一个文本分类器,能够自动识别新的评论是正面的还是负面的。
- 数据预处理:首先,需要对原始文本进行预处理,包括去除停用词、标点符号,进行词干提取或词形还原,然后使用词袋模型或TF-IDF转换文本为数值特征向量。
- 分割数据集:使用上述代码片段,将预处理后的特征和标签分割成训练集和测试集。
- 训练模型:使用训练集的特征和标签,训练一个朴素贝叶斯分类器。这可以通过调用sklearn库中的
MultinomialNB
类来实现。 - 评估模型:在测试集上评估模型的性能,可以使用准确率、召回率、F1分数等指标。
- 应用模型:模型训练完成后,可以用于对新的未知评论进行情感分类。
这样的流程能够帮助我们构建一个有效的文本分类系统,用于自动化文本内容的分类和管理。
调用这个训练好的模型的时候,需要将新的评论进行预处理吗?
答:确保新的评论经过同样的预处理步骤是非常重要的,因为训练模型是在预处理后的特征上进行的。如果不进行预处理或预处理步骤不一致,模型可能无法正确识别和分类新的评论,导致预测结果不准确。例如,如果模型是在去除停用词和词干提取后的数据上训练的,那么在预测新评论时也应该先执行相同的步骤。
此外,还需要注意的是,如果在训练阶段使用了诸如TF-IDF等方法,那么在对新评论进行预测时,应该使用与训练集相同的TF-IDF转换器,而不是重新创建一个新的转换器。这是因为TF-IDF值是基于整个语料库计算的,确保新评论的特征向量与训练数据在相同的尺度上。
第六章 特征工程 降维
数据降维的技术有哪些?
答案:主成分分析(PCA)、线性判别分析(LDA)、奇异值分解(SVD)
主成分分析的作用、应用场景、降维的特征数量
答:
-
主成分分析(Principal Component Analysis, PCA)
- 无监督学习方法,通过正交变换将一组可能存在相关性的变量转换成一组线性不相关的变量,称为主成分。PCA旨在最大化数据的方差,通常用于数据压缩和可视化。
- 应用场景:降维和数据可视化
-
线性判别分析(Linear Discriminant Analysis, LDA)
- 监督学习方法,旨在找到最佳的投影方向,以最大化类别之间的差异,同时最小化类别内部的差异,常用于分类问题中的降维。
- 应用场景:分类任务中的特征提取和降维
-
奇异值分解(SVD)
奇异值分解(SVD)是一种矩阵分解技术,它可以将任何m×n的矩阵A分解为三个矩阵的乘积:UΣVᵀ。这里U和V是正交矩阵,Σ是对角矩阵,其中对角线上的元素是A的奇异值,这些值反映了矩阵的重要特征。SVD广泛应用于数据降维、图像压缩、推荐系统和自然语言处理等领域,能够帮助提取数据的主要成分和结构。
如何处理缺失值?
- 直接删除:按行、按列
- 填充法:统一、统计值(中位数,均值等)、插值、建模预测等
数据预处理的归一化的不同方法目的是什么?
答:线性归一化、Z-score标准化(原始数据进行变换把数据变换到均值为0,方差为1范围内)
特征转换为数值向量的方法?
- 独热编码(One-Hot Encoding)
- 将分类特征转换为二进制向量,每个类别对应向量中的一个维度,该维度上的值为1,其余为0。
- 标签编码(Label Encoding)
- 将分类特征转换为整数,每个类别被赋予一个唯一的整数值。
- 词袋模型(Bag of Words)
- 对于文本数据,将文档表示为词汇出现频率的向量,忽略词序。
- TF-IDF(Term Frequency-Inverse Document Frequency)
- 在词袋模型基础上,结合词频和逆文档频率,对文本进行加权,反映词的重要性。
- 词向量(Word Embeddings)
- 如Word2Vec、GloVe等,将词汇映射到连续的向量空间中,捕捉语义和语法信息。
- TF-IDF加权的词向量
- 结合词向量和TF-IDF,生成文档级别的向量表示。
- CountVectorizer
- scikit-learn提供的用于文本特征提取的工具,生成词频矩阵。
第七章 关联规则和协同过滤
-
Apriori 算法的主要用途?
用于发现频繁项集和关联规则的经典算法
-
市场篮子分析的常用的算法有哪些?
Apriori算法是一种用于发现频繁项集和关联规则的经典算法。它核心思想是:如果一个项集是频繁的,那么它的所有非空子集也是频繁的。通过这种方式,Apriori算法可以高效地减少候选项集的数量,从而找到频繁项集和关联规则。
Apriori算法的步骤:
生成候选项集:生成所有可能的项集组合。
剪枝:移除不频繁的项集。
计算支持度:计算剩余项集的支持度。
生成频繁项集:保留支持度大于或等于最小支持度阈值的项集。
生成关联规则:从频繁项集中生成关联规则,并计算每个规则的置信度和提升度。 -
频繁项集、关联规则度量指标的作用和计算?
答:频繁项集是指在事务(transcation)数据库中出现频率超过某个最小支持度阈值的项集。
例如,如果我们设置最小支持度(Support)阈值为0.4(即至少在40%的事务中出现),我们可以计算每个项集的支持度,并找出频繁项集。
关联规则度量指标:
支持度(Support) 支持度用于识别频繁项集
置信度(Confidence) 置信度反映了规则的可靠性,高置信度的规则表示 A 和 B 之间的关联性较强,具有较高的可信度提升度(Lift)
提升度大于1:表示尿布和啤酒之间存在正相关关系,即当有人购买尿布时,购买啤酒的可能性比随机购买啤酒的可能性要高。
提升度等于1:表示尿布和啤酒之间没有关联性,即它们的共同出现是独立的。
提升度小于1:表示尿布和啤酒之间存在负相关关系,即当有人购买尿布时,购买啤酒的可能性比随机购买啤酒的可能性要低。 -
协同过滤算法的分类、区别、用途
答:
协同过滤算法是推荐系统中最核心的技术之一,主要用于预测用户对未评价项目的喜好程度,从而实现个性化推荐。它主要分为两大类:基于用户的协同过滤(User-based Collaborative Filtering)和基于物品的协同过滤(Item-based Collaborative Filtering)。
- 基于用户的协同过滤:寻找与目标用户具有相似评分模式的其他用户,然后推荐这些相似用户喜欢的、目标用户尚未评价的项目。这种方法直观且易于理解,但当用户数量庞大时,计算相似度的成本会很高,且新用户加入时需要重新计算。
- 基于物品的协同过滤:通过计算物品之间的相似度,推荐与用户已知喜好相似的其他物品。这种方法在用户规模增大时相对稳定,且能较好地处理冷启动问题,但物品特征变化时需要更新物品相似度矩阵。
协同过滤算法的关键优势在于能够发现用户的隐含偏好,即使用户没有明确表达过。它广泛应用于电影推荐、音乐推荐、电商产品推荐等领域,极大地提升了用户体验和平台的商业价值。然而,协同过滤也面临数据稀疏性和冷启动问题,即用户评分数据不完整以及如何给新用户提供推荐的挑战。
-
冷启动问题如何解决
答:基于内容的推荐:利用用户或项目的属性信息(如用户的基本信息、项目的描述等)进行推荐,缓解冷启动问题。
混合推荐:结合基于内容的推荐和协同过滤,利用不同的方法综合推荐。
引导用户行为:通过用户注册时的调查问卷、初次使用时的引导等方式,获取用户的初始偏好数据。例:让我们以一个虚构的零售店为例,该店售卖书籍、电子产品、食品和家居用品。我们将创建一些购物记录,然后应用市场篮子分析技术来解决上述问题。
数据构造
假设我们有以下购物记录(每个记录代表一个顾客的单次购物篮):
- {书籍, 食品}
- {电子产品, 家居用品}
- {书籍, 电子产品, 食品}
- {食品, 家居用品}
- {书籍, 电子产品}
- {书籍, 食品, 家居用品}
- {电子产品, 家居用品}
- {书籍, 食品}
- {电子产品, 食品}
- {食品, 家居用品}
1. 购物行为的基本分析—求出相应的频繁项集
使用Apriori算法
首先,我们需要确定一个最小支持度阈值。假设我们选择最小支持度为30%(即至少出现在3个购物篮中)。基于此,我们可以得到以下频繁项集:
- {书籍}(支持度40%)
- {食品}(支持度60%)
- {电子产品}(支持度40%)
- {家居用品}(支持度40%)
- {书籍, 食品}(支持度40%)
- {食品, 家居用品}(支持度30%)
支持度40%)
- {书籍, 食品}(支持度40%)
- {食品, 家居用品}(支持度30%)
2. 关联规则的分析
接下来,我们分析关联规则。为了简化,我们设定最小置信度为60%。从上面的频繁项集中,我们可以得到以下规则:
- 如果买了书籍,则很可能买食品(置信度=5/5=100%)
- 如果买了食品,则可能买书籍(置信度=4/6=66.67%)
- 如果买了食品,则可能买家居用品(置信度=3/6=50%)
3. 用户分群分析
基于购买行为,我们可以尝试对用户进行分群。例如,我们可以观察到,购买书籍的顾客倾向于同时购买食品,而购买电子产品的顾客则可能同时购买家居用品。因此,我们可以将顾客分为两组:
- “阅读与美食爱好者”(书籍+食品)
- “科技与生活达人”(电子产品+家居用品)
4. 改进用户体验的建议
根据以上分析,我们可以提出以下建议:
- 对于“阅读与美食爱好者”,可以考虑在店内设置一个区域,将书籍和食品摆放在附近,方便他们一次性完成购物。
- 为“科技与生活达人”提供电子产品和家居用品的组合优惠,吸引他们同时购买这两类商品。
- 在收银台附近放置小食品,因为食品的高支持度表明其作为冲动购买的可能性较高。
- 提供个性化推荐,例如向购买书籍的顾客推荐食品,向购买电子产品的顾客推荐家居用品。
这些建议旨在通过理解顾客的购物习惯来优化产品布局和促销策略,从而提升顾客满意度和销售业绩。