机器学习复习
一、knn算法
全称是k-nearest neighbors,通过寻找k个距离最近的数据,来确定当前数据值的大小或类别。是机器学习中最为简单和经典的一个算法。
优点: 1.简单,易于理解,易于实现,无需训练;
2.适合对稀有事件进行分类;
3.对异常值不敏感。
缺点︰ 1.样本容量比较大时,计算时间很长;
⒉.不均衡样本效果较差;
n_neighbors : k值,邻居的个数,默认为5。【关键参数】
p : 距离的计算方式。P=1为曼哈顿距离,p=2为欧式距离。
from sklearn.neighbors import KNeighborsClassifier
二、线性回归算法
核心目标是建立自变量(特征)与因变量(标签)之间的线性关系模型,用于预测连续型输出
线性回归用 “均方误差(MSE)” 作为损失函数
优点
- 简单易理解:模型形式直观,权重可解释(如 “w₁=5000” 表示 “面积每增加 1㎡,房价增加 5000 元”);
- 训练效率高:梯度下降迭代快,正规方程可直接求解;
- 可扩展性强:是岭回归、Lasso 回归、逻辑回归(分类任务)等算法的基础。
缺点
- 只能拟合线性关系:无法处理自变量与因变量的非线性关联(如 “年龄与收入” 可能是二次关系);
- 对异常值敏感:MSE 损失会放大异常值的影响(如极端高房价样本会严重偏离拟合直线);
- 特征依赖强:需手动筛选有效特征,且无法自动捕捉特征间的交互作用(如 “面积 × 楼层” 的联合影响)。
预测类任务:房价预测、销量预测、股票价格趋势预测、气温预测;
from sklearn.linear_model import LinearRegression
三、逻辑回归算法
核心功能是解决分类问题
逻辑回归通过 “转换函数”用sigmod函数 将线性回归的连续输出映射到 **[0,1] 区间的概率值 **,再根据概率阈值(通常是 0.5)判断类别
from sklearn.linear_model import LogisticRegression
逻辑回归采用对数损失(Log Loss),也叫交叉熵损失
优点:
- 可解释性强:权重wj的正负和大小直接反映特征的影响 —— 例如wj>0表示该特征增强正类概率,wj的绝对值越大,影响越强;
- 计算高效:模型参数少,训练和预测速度快,适合大规模数据;
- 输出概率值:不仅能分类,还能给出 “置信度”(如 “90% 概率是垃圾邮件”),便于后续决策;
抗过拟合能力:可通过 “正则化(L1/L2)” 控制参数大小,减少过拟合(L1 正则化还能实现特征选择)。
缺点:
- 仅适用于二分类:原生逻辑回归只能处理 “是 / 否” 类问题,多分类需通过 “One-vs-Rest”(一对多)或 “One-vs-One”(一对一)扩展;
- 对非线性数据拟合差:逻辑回归本质是 “线性分类器”,若特征与标签呈非线性关系(如 “环形分布”),需先通过特征工程(如多项式特征、核函数)转换特征;
- 对异常值敏感:异常值会严重影响线性得分z,进而扭曲概率预测,需提前处理异常值。
Penalty:正则化方式,有l1和l2两种。用于指定惩罚项中使用的规范
C:正则化强度。为浮点型数据。正则化系数λ的倒数,float类型,默认为1.0。必须是正浮点型数。像SVM一样,越小的数值表示越强的正则化。
优点:实现简单,易于理解和实现;计算代价不高,速度很快,存储资源低。
缺点:容易欠拟合,分类精度可能不高。
过拟合问题:
核心特征是模型在训练数据上表现极佳,但对未见过的新数据(测试数据 / 真实场景数据)泛化能力极差
过拟合的本质是模型复杂度与数据复杂度不匹配
过采样(Oversampling) 和 下采样(Undersampling) 是两类核心的重采样技术,主要用于解决类别不平衡问题
过采样核心思想:不改变多数类样本数量,通过 “生成 / 复制少数类样本”,让少数类的样本量接近多数类。本质是 “给少数类‘增重’”,让模型更关注少数类特征。
下采样核心思想:不改变少数类样本数量,通过 “删除多数类样本”,让多数类的样本量接近少数类。本质是 “给多数类‘减重’”,降低模型对多数类的偏向性。
1. 归一化(Normalization)
归一化通常指将数据缩放到 [0, 1] 或 [-1, 1] 的固定区间 ,也称为 “Min-Max 缩放”。最常见的是缩放到 [0, 1] 区间。
公式(缩放到 [0, 1]):
对于特征数据集中的每个样本值 x:Xnorm=X−min(X)/max(X)−min(X)
其中:min(X) 是特征 X 的最小值;max(X) 是特征 X 的最大值。
2. Z 标准化(Z-Score Standardization)
Z 标准化将数据转换为均值为 0、标准差为 1 的分布,也称为 “标准化” 或 “标准差标准化”。转换后的数据称为 “Z 分数”(Z-Score)。
公式:
对于特征数据集中的每个样本值 x:Xstd=X−μ/σ
其中:μ 是特征 X 的均值(Mean);σ 是特征 X 的标准差(Standard Deviation)。
四、决策树算法
树模型参数:max_depth: 表示树的最大深度;
5.min_samples_split :(表示分裂一个内部节点需要的最小样本数,默认为2),如果某节点的样本数少于min_samples_split,则不会继续再尝试选择最优特征来进行划分,如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值;
min_samples_leaf :(叶子节点最少样本数),这个值限制了叶子节点最少的样本数,如果某叶子节点数目小于样本数,则会和兄弟节点一起被剪枝,如果样本量不大,不需要管这个值;
max_leaf_nodes :(最大叶子节点数),通过限制最大叶子节点数,可以防止过拟合,默认是"None”,即不限制最大的叶子节点数。如果加了限制,算法会建立在最大叶子节点数内最优的决策树。如果特征不多,可以不考虑这个值,但是如果特征分成多的话,可以加以限制具体的值可以通过交叉验证得到。
criterion :gini or entropy 【采用基尼系数还是熵值衡量,默认基尼系数】
优点:
- 极强的可解释性:树形结构直观,可直接可视化(如用 Graphviz 绘制),非技术人员也能理解决策逻辑(比如 “为什么判断这个用户会购买?因为年龄> 30 岁且月收入 > 8000 元”)。
- 无需特征预处理:不需要对特征进行标准化 / 归一化(如 “年龄” 和 “收入” 单位不同,不影响决策树分裂),也能处理非线性特征(如 “年龄” 和 “购买意愿” 的非线性关系)。
- 适用场景广:同时支持分类任务(如 “垃圾邮件识别”)和回归任务(如 “销量预测”)。
- 抗噪性较强:对部分噪声数据不敏感(尤其通过剪枝后)。
缺点:
- 易过拟合:未剪枝的决策树复杂度高,泛化能力差(需通过剪枝或集成学习改进)。
- 对异常值敏感:极端异常值(如 “月收入 1 亿”)可能导致节点分裂偏向异常值,影响整体模型。
- 容易产生偏斜树:若数据类别不平衡(如 90% 是 “不购买”,10% 是 “购买”),决策树可能倾向于预测多数类,忽略少数类。
- 稳定性差:训练数据微小变化(如新增 1 个样本)可能导致树的结构发生巨大变化,模型结果不稳定。
五、随机森林
基于决策树的集成学习(Ensemble Learning)算法
from sklearn.ensemble import RandomForestClassifier
n_estimators :(随机森林独有)随机森林中决策树的个数
criterion :(同决策树)
节点分割依据,默认为基尼系数。
可选【entropy:信息增益】
max_depth:(同决策树)【重要】
default=(None)设置决策树的最大深度,默认为None。
【(1)数据少或者特征少的时候,可以不用管这个参数,按照默认的不限制生长即可
(2)如果数据比较多特征也比较多的情况下,可以限制这个参数,范围在10~100之间比较好】
min_samples_split : (同决策树)【重要】
这个值限制了子树继续划分的条件,如果某节点的样本数少于设定值,则不会再继续分裂。默认是2.如果样本量不大,不需要管这个值。如果样本量数量级非常大,则建议增大这个值。
min_samples_leaf :(同决策树)【重要】
这个值限制了叶子节点最少的样本数,如果某叶子节点数目小于样本数,则会和兄弟节点一起被剪枝。 默认是1,可以输入最少的样本数的整数,或者最少样本数占样本总数的百分比。如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值。
max_features : (随机森林独有)【重要】
随机森林允许单个决策树使用特征的最大数量。选择最适属性时划分的特征不能超过此值。
六、贝叶斯
贝叶斯定理是所有贝叶斯算法的数学基础,它描述了 “先验概率” 如何通过 “似然度” 和 “证据” 更新为 “后验概率”。
from sklearn.naive_bayes import MultinomialNB
| 高斯朴素贝叶斯(Gaussian NB) | 特征为连续值(如身高、体重、温度) | 给定类别y时,特征xi服从高斯分布(正态分布) | 基于身高、体重预测性别;基于气温、湿度预测天气类型 |
| 多项式朴素贝叶斯(Multinomial NB) | 特征为离散计数(如文本中词的出现次数) | 给定类别y时,特征xi服从多项式分布 | 文本分类(如垃圾邮件识别:特征为 “关键词出现次数”);文档主题分类 |
| 伯努利朴素贝叶斯(Bernoulli NB) | 特征为二值变量(如 “有 / 无”“是 / 否”) | 给定类别y时,特征xi服从伯努利分布(0-1 分布) | 文本分类(特征为 “关键词是否出现”,而非出现次数);用户行为预测(如 “是否点击链接”) |
朴素贝叶斯
优点:
- 计算速度快:仅需统计先验概率和似然度,无需迭代训练;
- 数据需求少:小样本即可训练(尤其适合数据稀缺场景);
- 支持多分类:天然适配多类别任务(如文本主题分为 “科技”“娱乐”“教育”);
- 概率可解释:输出结果是 “属于某类别的概率”,便于理解决策逻辑。
缺点:
- 特征独立假设过强:实际数据中特征常存在依赖(如 “身高” 和 “体重” 相关),会导致预测偏差;
- 对 “零概率” 敏感:若某特征在某类别中从未出现(如 “关键词 A 在正常邮件中从未出现”),会导致∏P(xi∣y)=0,需通过 “拉普拉斯平滑” 修正。
贝叶斯
优点:
理论基础坚实:贝叶斯算法基于贝叶斯定理,它为概率模型的学习和推理提供了明确的理论框架。
易于实现:贝叶斯算法的逻辑简单,只要使用贝叶斯公式转化即可,因此易于实现。
分类过程中时空开销小:贝叶斯算法假设特征之间相互独立,因此在分类过程中,只会涉及到二维存储,大大降低了时空开销。
易于并行化:贝叶斯算法可以很方便地进行并行化处理,提高计算效率。
缺点:
假设前提:贝叶斯算法假设样本特征彼此独立,这个假设在实际应用中往往是不成立的,尤其在属性个数比较多或者属性之间相关性较大时,分类效果不好。
对噪声敏感:如果数据中存在大量噪声,贝叶斯算法可能会表现不佳。
模型选择:贝叶斯算法需要对模型进行正确的选择,如果模型选择不当,可能会导致算法性能下降。
高维特征空间的应用限制:贝叶斯算法在处理高维特征空间时可能会遇到困难,因为高维空间中的数据通常具有稀疏性,这会导致贝叶斯网络的学习和推理变得非常困难。
参数:
alpha: 控制模型拟合时的平滑度
fit_prior: 是否去学习类的先验概率
class_prior: 各个类别的先验概率,如果没有指定,则模型会根据数据自动学习, 每个类别的先验概率相同,等于类标记总个数N分之一。
七、SVM算法
核心思想是 “找到最优超平面实现样本分类”,在小样本、高维空间(如文本分类)中表现优异,既可用于分类(SVC),也可用于回归(SVR)。
from sklearn.svm import SVC、from sklearn.svm import SVR
实际场景中,样本往往线性不可分(如环形分布的两类样本)。此时 SVM 通过核函数(Kernel Function) 将低维特征空间的数据映射到高维空间,使原本线性不可分的数据在高维空间变得线性可分。
C :惩罚因子【浮点数,默认为1.】【软间隔】
(1)C越大,对误分类的惩罚增大,希望松弛变量接近0,趋向于对训练集全分对的情况,这样对训练集测试时准确率很高,但泛化能力弱;
(2)C值小,对误分类的惩罚减小,允许容错,将他们当成噪声点,泛化能力较强。
->>建议通过交叉验证来选择
kernel: 核函数【默认rbf(径向基核函数|高斯核函数)】
可以选择线性(linear)、多项式(poly)、sigmoid
->>多数情况下选择rbf
degree:【整型,默认3维】
多项式poly函数的维度,默认是3,选择其他核函数时会被忽略。
->>按默认【选择rbf之后,此参数不起作用】
gamma: ‘rbf’,‘poly’ 和‘sigmoid’的核函数参数。默认是’auto’。
(1)如果gamma是’auto’,那么实际系数是1 / n_features,也就是数据如果有10个特征,那么gamma值维0.1。(sklearn0.21版本)
(2)在sklearn0.22版本中,默认为’scale’,此时gamma=1 / (n_features*X.var())#X.var()数据集所有值的方差。
<1>gamma越大,过拟合风险越高
<2> gamma越小,过拟合风险越低
->>建议通过交叉验证来选择
八、K-means聚类算法
from sklearn.cluster import KMeans
核心目标是将无标签的数据集自动划分成K
个(用户预先指定)“相似” 的簇(Cluster),实现 “簇内数据相似度高、簇间数据相似度低” 的效果。
简单理解:
先随机选K
个点作为初始 “质心”(每个质心代表一个簇的中心);
把每个样本分配到距离最近的质心所在的簇;
重新计算每个簇的新质心(簇内所有样本的均值);
重复 “分配样本→更新质心” 的过程,直到质心位置不再变化(或变化小于阈值),此时聚类结果稳定。
1. K 值的选择(核心难题)
K-means 无法自动确定K
,需通过以下方法选择最优K
:
肘部法则(Elbow Method):
绘制 “K 值 - SSE” 曲线,随着K
增大,SSE 会逐渐减小(簇数越多,每个簇越紧凑);当K
增加到某个值后,SSE 的下降幅度会突然变缓(曲线出现 “肘部”),这个 “肘部” 对应的K
就是最优值。
例:若 K=3 时 SSE 从 1000 降到 500,K=4 时从 500 降到 480,K=5 时从 480 降到 470,则 K=3 是肘部,为最优值。
轮廓系数(Silhouette Coefficient):
对每个样本计算 “轮廓系数”,取值范围[-1,1]
:
系数接近 1:样本与所在簇高度相似,与其他簇差异大,聚类效果好;
系数接近 - 1:样本可能被分配到错误的簇;
计算所有样本的平均轮廓系数,选择系数最大的K
。
优点
- 简单高效:原理直观,计算复杂度低(时间复杂度
O(n*K*t)
,n
为样本数,t
为迭代次数),适合大规模数据集; - 可扩展性强:支持增量更新(如新增样本时,无需重新聚类所有数据);
- 结果易解释:簇的划分清晰,质心可作为簇的 “特征代表”(如客户分群后,质心可反映该类客户的平均消费、年龄等)。
缺点
- 对 K 值敏感:必须预先指定
K
,且K
的微小变化可能导致聚类结果完全不同; - 受初始质心影响:随机初始化可能陷入 “局部最优”(而非全局最优),需多次运行取最优;
- 对异常值敏感:异常值会显著拉高簇的质心(因为均值对异常值鲁棒性差),导致聚类偏移;
- 仅适用于凸簇:无法处理非凸形状的簇(如环形、螺旋形数据),因为基于距离的分配会将非凸簇误分为多个凸簇;
- 依赖数据分布:假设所有簇的方差相同、样本数量相近,若数据分布不均(如某簇样本极多,某簇极少),聚类效果差。
n_clusters: 类中心的个数,就是要聚成几类。【默认是8个】
init:参初始化的方法,默认为'k-means++'
(1)'k-means++': 用一种特殊的方法选定初始质心从而能加速迭代过程的收敛.
(2) ‘random’: 随机从训练数据中选取初始质心。
(3) 如果传递的是一个ndarray,则应该形如 (n_clusters, n_features) 并给出初始质心。
n_init: 整形,缺省值=10
用不同的质心初始化值运行算法的次数,最终解是在inertia意义下选出的最优结果。
max_iter :
执行一次k-means算法所进行的最大迭代数。
Tol: 与inertia结合来确定收敛条件。
precompute_distances:三个可选值,‘auto’,True 或者 False。
预计算距离,计算速度更快但占用更多内存。
(1)‘auto’:如果 样本数乘以聚类数大于 12million 的话则不预计算距离。
(2)True:总是预先计算距离。
(3)False:永远不预先计算距离。
verbose:整形,默认值=0
random_state :随机状态
copy_x:布尔型,默认值=True
当我们precomputing distances时,将数据中心化会得到更准确的结果。如果把此参数值设为True,则原始数据不会被改变。如果是False,则会直接在原始数据 上做修改并在函数返回值时将其还原。但是在计算过程中由于有对数据均值的加减运算,所以数据返回后,原始数据和计算前可能会有细小差别。
algorithm:'auto','full' or 'elkan'.默认为'auto'
full:采用经典的EM算法
elkan:通过使用三角不等式从而更有效,但不支持稀疏数据
auto:数据稀疏选择full模式,数据稠密选择elkan模式
九、DBSCAN算法
from sklearn.cluster import DBSCAN
优点
- 无需预设簇数量:区别于 K-means,DBSCAN 自动识别簇的数量;
- 处理任意形状簇:能正确聚类环形、螺旋形等非凸结构的簇(K-means 对此失效);
- 抗噪声能力强:直接将低密度点标记为噪声,不受异常值干扰;
- 聚类结果稳定:对同一参数设置,结果唯一(无随机初始化问题)。
缺点
- 参数敏感:ε 和 MinPts 的微小变化可能导致聚类结果差异很大;
- 高维数据表现差:高维空间中 “距离” 的定义变得模糊(维度灾难),ε 难以设置;
- 密度不均数据难处理:对密度差异大的簇(如一个密集簇和一个稀疏簇),无法同时兼顾;
- 计算复杂度较高:时间复杂度为 O (n²)(n 为样本数),不适合超大规模数据(可通过空间索引优化至 O (n log n))。
eps: DBSCAN算法参数,即我们的ϵϵ-邻域的距离阈值,和样本距离超过ϵϵ的样本点不在ϵϵ-邻域内。默认值是0.5.一般需要通过在多组值里面选择一个合适的阈值。eps过大,则更多的点会落在核心对象的ϵϵ-邻域,此时我们的类别数可能会减少, 本来不应该是一类的样本也会被划为一类。反之则类别数可能会增大,本来是一类的样本却被划分开。
min_samples: DBSCAN算法参数,即样本点要成为核心对象所需要的ϵϵ-邻域的样本数阈值。默认值是5. 一般需要通过在多组值里面选择一个合适的阈值。通常和eps一起调参。在eps一定的情况下,min_samples过大,则核心对象会过少,此时簇内部分本来是一类的样本可能会被标为噪音点,类别数也会变多。反之min_samples过小的话,则会产生大量的核心对象,可能会导致类别数过少。
十、TF-IDF算法
核心作用是将文本转换为数值特征,同时衡量一个词在文档中的 “重要性”—— 既考虑词在当前文档中的出现频率,又兼顾其在整个语料库中的普遍程度,最终过滤掉常见词(如 “的”“是”),突出有区分度的词(如专业术语)。
TF-IDF 由两部分组成:词频(TF) 和逆文档频率(IDF),最终特征值为两者的乘积。
1. 词频(TF):词在当前文档中的出现频率
TF 衡量一个词在单篇文档中的出现频率,计算公式有多种,最常用的是:
TF(t,d)=文档d的总词数词t在文档d中出现的次数
含义:词 t 在文档 d 中出现得越频繁,TF 值越高,说明它在该文档中可能越重要;
其他形式:也可用 “原始出现次数” 作为 TF(不做归一化),但归一化后更能避免文档长度对结果的影响(长文档的词出现次数天然更高)。
2. 逆文档频率(IDF):词在整个语料库中的罕见程度
IDF 衡量一个词在所有文档(语料库) 中的普遍程度,计算公式为:
IDF(t)=log(包含词t的文档数+1语料库中文档总数+1)+1
含义:若词 t 仅在少数文档中出现(包含 t 的文档数少),则 IDF 值高,说明 t 具有强区分度;若 t 在多数文档中都出现(如 “的”),则 IDF 值低,说明 t 是通用词;
公式中的 “+1” 是平滑处理,避免 “包含词 t 的文档数 = 0” 时分母为 0(此时 IDF 会被计算为总文档数,而非无穷大);
对数底数通常取 2 或自然对数,不影响相对大小。
3. TF-IDF 的最终计算
将 TF 和 IDF 相乘,得到词 t 在文档 d 中的 TF-IDF 值:
TF-IDF(t,d)=TF(t,d)×IDF(t)
结果含义:值越高,说明词 t 在文档 d 中 “既重要又独特”,是该文档的核心特征。
from sklearn.feature_extraction.text import TfidfVectorizer
优点
- 简单高效:原理直观,计算复杂度低,适合大规模文本数据;
- 可解释性强:结果可直接对应 “词的重要性”,易于理解;
- 过滤通用词:通过 IDF 天然过滤 “的”“是” 等无意义词,保留有区分度的特征。
缺点
- 忽略语义和上下文:仅基于词频统计,无法理解词的语义(如 “苹果” 既指水果也指公司),也不考虑词的位置和上下文关系(如 “我爱你” 和 “你爱我” TF-IDF 相同);
- 对低频重要词不友好:若一个词在文档中出现次数少(TF 低),即使 IDF 高,TF-IDF 值也可能偏低(如专业术语 “Transformer” 在某篇文档中只出现 1 次);
- 依赖语料库:IDF 计算受语料库影响,若语料库不具代表性(如样本太少),结果会偏差。
十一、词向量转换评论学习项目分析
核心是将非结构化的评论文本(如电商评价、外卖反馈、酒店评论等)转换为计算机可理解的数值向量(词向量),再基于词向量完成情感分析、主题挖掘、用户需求识别等下游任务。该项目的核心价值在于 “让文本‘可计算’”,最终为业务决策(如商品优化、服务改进、用户分层)提供数据支撑。
from sklearn.feature_extraction.text import CountVectorizer
十二、PCA降维
核心目标是在损失尽可能少的数据信息的前提下,将高维数据映射到低维空间(即 “主成分” 方向),从而解决 “维度灾难”(高维数据计算量大、冗余信息多、模型泛化能力差等问题)。