FreedomLeo1
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Python机器学习笔记(二十五、算法链与管道)
在机器学习中,数据预处理和模型训练通常涉及多个步骤,如数据缩放、特征合并和模型选择。为了简化这些步骤的链接和管理,可以使用Pipeline类。Pipeline将多个处理步骤封装为一个单一的估计器,便于代码管理和减少错误。例如,在乳腺癌数据集上,使用MinMaxScaler进行数据预处理后,通过SVC模型进行分类,Pipeline可以自动处理数据缩放和模型训练。此外,结合GridSearchCV,可以在交叉验证中同时搜索所有处理步骤的参数,避免信息泄露,确保模型评估的准确性。Pipeline不仅适用于分类任务原创 2025-05-16 20:28:39 · 265 阅读 · 0 评论 -
Python机器学习笔记(二十四 模型评估与改进-评估指标与评分)
在监督学习中,选择合适的评估指标对模型性能的评估至关重要。常用的指标包括精度(用于分类)和R2(用于回归),但这些指标并不总是适用于所有应用场景。选择指标时应考虑最终目标,即商业指标,如减少交通事故或增加用户消费。对于不平衡数据集,精度可能误导,因此需要更合适的指标如混淆矩阵、准确率、召回率和F1分数。此外,准确率-召回率曲线和ROC曲线提供了更全面的模型性能视图,AUC(ROC曲线下面积)是评估不平衡数据集的有力工具。在多分类问题中,可以使用宏平均、加权平均或微平均F1分数。在模型选择中,可以通过scor原创 2025-05-16 11:44:40 · 226 阅读 · 0 评论 -
Python机器学习笔记(二十三 模型评估与改进-网格搜索)
本文介绍了通过调参来提升模型泛化性能的方法,重点讨论了scikit-learn中的网格搜索(GridSearchCV)技术。首先,文章强调了理解模型参数的重要性,并指出找到最佳参数组合是提升模型性能的关键。接着,详细介绍了如何使用网格搜索来尝试所有可能的参数组合,并通过交叉验证来评估每种组合的性能。文章还提到了参数过拟合的风险,并建议使用验证集来避免这一问题。此外,文章还探讨了嵌套交叉验证和并行化调参的方法,以提高调参效率和结果的稳定性。最后,文章总结了在调参过程中应注意的细节,如保留独立的测试集用于最终评原创 2025-05-15 11:36:35 · 220 阅读 · 0 评论 -
Python机器学习笔记(二十二、模型评估-交叉验证)
交叉验证是一种评估模型泛化性能的统计学方法,通过多次划分数据集来训练和测试模型,比单次划分更稳定和全面。常用的k折交叉验证将数据分为k部分,每次用一部分作为测试集,其余作为训练集,重复k次,最终得到k个精度值。scikit-learn中的cross_val_score函数可实现交叉验证,默认执行5折交叉验证。交叉验证的优点包括更高效的数据使用和更可靠的性能评估,但缺点是计算成本较高。对于分类问题,推荐使用分层k折交叉验证,以确保每个折中的类别比例与整体数据集一致。此外,还有留一法、打乱划分和分组交叉验证等策原创 2025-05-14 17:08:44 · 155 阅读 · 0 评论 -
Python机器学习笔记(二十一、专家知识)
也就是说,在划分训练集和测试集的时候,希望使用某个特定日期之前的所有数据作为训练集,该日期之后的所有数据作为测试集。测试集中POSIX 时间特征的值超出了训练集中特征取值的范围:测试集中数据点的时间戳要晚于训练集中的所有数据点。领域专家可以帮助找出有用的特征,例如:旅行社的工作人员想要预测机票价格,假设有价格以及日期、航空公司、出发地和目的地的记录,机器学习模型可能从这些记录中构建一 个相当不错的模型,但可能无法学到机票价格中的某些重要因素,比如在度假高峰月份和假日期间,机票价格通常更高。原创 2025-01-14 11:24:56 · 799 阅读 · 0 评论 -
Python机器学习笔记(二十、自动化特征选择)
计算阈值的方法各有不同,最简单的是SelectKBest和SelectPercentile,前者选择固定数量的k个特征,后者选择固定百分比的特征。其中一种特殊方法是递归特征消除(recursive feature elimination,RFE),它从所有特征开始构建模型,并根据模型舍弃最不重要的特征,然后使用未被舍弃特征来构建一个新模型,如此继续,直到仅剩下预设数量的特征。在添加新特征或处理一般的高维数据集时,最好将特征的数量减少到只包含最有用的那些特征,并删除其余特征。但原始特征的还原并不完美。原创 2025-01-13 10:58:31 · 1117 阅读 · 0 评论 -
Python机器学习笔记(十九、单变量非线性变换)
对回归的目标变量y进行变换有时非常有用,比如尝试预测计数(订单数量)是一项相当常见的任务,这里使用 log(y + 1) 变换往往很有用。从以上笔记的例子中可以看出,分箱、多项式和交互项都对模型在给定数据集上的性能有很大影响,对于复杂度较低的模型更是这样,比如线性模型和朴素贝叶斯模型。基于树的模型只关注特征的顺序,线性模型和神经网络依赖于每个特征的尺度和分布。不过应用对数变换可能有用。从上面输出可以看出,数字2似乎是最常见的,共出现了68次(bincount始终从0开始),更大数字的出现次数快速下降。原创 2025-01-10 09:18:06 · 732 阅读 · 0 评论 -
Python机器学习笔记(十八、交互特征与多项式特征)
学到的斜率是向下的,并且在所有箱子中都相同——只有一个x轴特征,也就只有一个斜率。为了实现这一点,我们可以添加交互特征或乘积特征,用来表示数据点所在的箱子以及数据点在x轴上的位置。可以看到,X_poly 的第一列与 X 完全对应,而其他列则是第一列的幂。这个数据集现在有20个特征:数据点所在箱子的指示符与原始特征和箱子指示符的乘积。使用更加复杂的模型(即核 SVM),能够学到一个与多项式回归的复杂度类似的预测结果,且不需要进行显式的特征变换。输出的图形是使用分箱特征和单一全局斜率的线性回归。原创 2025-01-09 22:44:57 · 998 阅读 · 0 评论 -
Python机器学习笔记(十七、分箱、离散化、线性模型与树)
因为每个箱子内的特征是不变的,所以对于一个箱子内的所有点,任何模型都会预测相同的值。比较对特征进行分箱前后模型学到的内容,我们发现,线性模型变得更加灵活了,因为现在它对每个箱子具有不同的取值,而决策树模型的灵活性降低了。有一种方法可以让线性模型在连续数据上变得更加强大,就是使用特征分箱(binning,也叫离散化discretization)将其划分为多个特征,即:假设将特征的输入范围(在这个例子中是从-3到3)划分成固定个数的箱子(bin), 比如10个,那么数据点就可以用它所在的箱子来表示。原创 2024-12-30 11:38:25 · 822 阅读 · 0 评论 -
Python机器学习笔记(十六、数据表示与特征工程-分类变量)
在机器学习的过程中,我们一般假设数据是由浮点数组成的二维数组,每一列描述数据点的但真实情况下,数据并不一定按照这种方式收集。一种常见的特征类型是,也叫。通常这种特征并不是数值。。已经见过的连续特征的例子包括图像像素明暗程度和鸢尾花的尺寸测量。分类特征的例子包括某种产品的品牌、颜色或销售部门(图书、服装、硬件)。这些都是描述一件产品的属性,它们不以连续的方式变化。一件产品要么属于服装部门,要么属于图书部门。原创 2024-12-28 22:43:48 · 1653 阅读 · 0 评论 -
Python机器学习笔记(十五、聚类算法的对比和评估)
回到人脸图像的例子,我们希望找到类似人脸的分组,比如男人和女人、老人和年轻人,或者有胡子的人和没胡子的人。分解、流形学习和聚类都是加深数据理解的重要工具,在没有监督信息的情况下,也是理解数据的仅有的方法。有一些分支代表更为不同的组,但似乎没有一个特别合适的簇的数量。这些是人脸数据集中被DBSCAN标记为噪声的样本,将这些图像与随机选择的人脸图像样本进行比较,我们可以猜测它们被标记为噪声的原因:第2行第9张图像显示一个人正在用玻璃杯喝水,还有人戴帽子的图像,在第2行第6张图像中,人脸前面有一只手。原创 2024-12-27 16:30:20 · 1141 阅读 · 0 评论 -
Python机器学习笔记(十四、凝聚聚类和DBSCAN)
如果距起始点的距离在 eps 之内的数据点个数小于 min_samples,那么这个点被标记为噪声(noise),也就是说它不属于任何簇。DBSCAN 的主要优点:不需要用户先验地设置簇的个数,可以划分具有复杂形状的簇,还可以找出不属于任何簇的点。最后,一共有三种类型的点:核心点、与核心点的距离在 eps 之内的点(叫作边界点, boundary point)和噪声。因此,边界点所属的簇依赖于数据点的访问顺序。scikit-learn中实现的停止准则是簇的个数,因此相似的簇被合并,直到仅剩下指定个数的簇。原创 2024-12-27 11:58:06 · 1460 阅读 · 0 评论 -
Python机器学习笔记(十三、k均值聚类)
k均值还有一个缺点,就是对簇形状的假设的约束性较强,而且还要求指定所要寻找的簇的个数(在现实世界的应用中可能并不知道这个数字)。算法交替执行以下两个步骤:将每个数据点分配给最近的簇中心,然后将每个簇中心设置为所分配的所有数据点的平均值。我们将其应用于上图中的模拟数据,将KMeans 类实例化,并设置我们要寻找的簇个数3(如果不指定n_clusters,它的默认值是 8)。此图是:利用 100 个分量(或簇中心)的 k 均值、PCA 和 NMF 的图像重建的对比——k 均值的每 张图像中仅使用了一个簇中心。原创 2024-12-26 19:02:35 · 840 阅读 · 0 评论 -
Python机器学习笔记(十二、用t-SNE进行流形学习)
t-SNE背后的思想是找到数据的一个二维表示,尽可能地保持数据点之间的距离。t-SNE首先给出每个数据点的随机二维表示,然后让在原始特征空间中距离较近的点更加靠近,原始特征空间中相距较远的点更加远离。t-SNE重点关注距离较近的点,而不是保持距离较远的点之间的距离。PCA通常是用于变换数据的首选方法,使我们能够用散点图将其可视化,但这一方法的性质(先旋转然后减少方向)限制了其有效性,就像在上一次学习 Wild 数据集 Labeled Faces 的散点图中所看到的那样。t-SNE的结果非常棒。原创 2024-12-24 11:56:35 · 401 阅读 · 0 评论 -
Python机器学习笔记(十一、特征提取)
特征提取PCA 的另一个应用是特征提取。特征提取背后的思想是,可以找到一种数据表示,比给定的原始表示更适合于分析。特征提取很有用,它的一个很好的应用实例就是图像。图像由像素组成,通常存储为红绿蓝(RGB)强度。图像中的对象通常由上千个像素组成,它们只有放在一起才有意义。现在学习使用 PCA 对图像做特征提取的一个简单示例,处理 Wild 数据集 Labeled Faces (标记人脸)中的人脸图像。这一数据集包含从互联网下载的名人脸部图像,它包含从 21 世纪初开始的政治家、歌手、演员和运动员的人脸图像。(原创 2024-12-24 11:26:57 · 1177 阅读 · 0 评论 -
Python机器学习笔记(十、降维、特征提取与流形学习)
在二维空间中,只有一个成直角的方向,但在更高维的空间中会有(无穷)多的正交方向。每张图都包含两个直方图,一个是良性类别的所有点(蓝色),一个是恶性类别的所有点(红色)。可以看到,在第一个主成分中,所有特征的符号相同(均为正,但前面我们提到过,箭头指向哪个方向无关紧要)。在 PCA 找到的旋转表示中,两个坐标轴是不相关的,也就是说,对于这种数据表示,除了对角线,相关矩阵全部为零。但要注意,我们没有保留原始特征之一,而是找到了最有趣的方向(第一张图中从左上到右下)并保留这一方向,即第一主成分。原创 2024-12-19 10:15:40 · 1012 阅读 · 0 评论 -
Python机器学习笔记(九、无监督学习-预处理与缩放)
数据集的无监督变换(unsupervised transformation)是创建数据新的表示的算法,与数据的原始表示相比,新的表示可能更容易被人或其他机器学习算法所理解。无监督变换的一个常见应用是降维(dimensionality reduction),它接受包含许多特征的数据的高维表示,并找到表示该数据的一种新方法,用较少的特征就可以概括其重要特性。也就是说,transform 方法总是减去训练集的最 值,然后除以训练集的范围,而这两个值可能与测试集的最小值和范围并不相同。但现在数据集看起来不一样。原创 2024-12-17 11:55:07 · 935 阅读 · 0 评论 -
Python机器学习笔记(八、分类器的不确定度估计)
总之,predict_proba 和 decision_function 的形状始终相同, 都是 (n_samples, n_ classes)——除了二分类特殊情况下的 decision_function。因此,如果盲目地将一个算法应用于数据集,而不去理解模型所做的假设以及参数设定的含义,不太可能会得到精度高的模型。多分类中,decision_function 的形状为 (n_samples, n_classes),每一列对应每个类别的“确定度分数”,分数较高的类别可能性更大,得分较低的类别可能性较小。原创 2024-12-16 14:32:19 · 793 阅读 · 0 评论 -
Python机器学习笔记(七、深度学习-神经网络)
如果使用包含 1000 个隐单元的单隐层,那么在输入层和隐层之间需要学习 100 * 1000 = 100 000 个权重, 隐层到输出层之间需要学习 1000 * 1 = 1000 个权重,总共 101 000 个权重。这些内容定义了我们想要学习的模型。先学习较为简单的深度学习算法,用于分类和回归的多层感知机(multilayer perceptron,MLP),它可以作为研究更复杂的深度学习方法的起点。图中,左边的每个结点代表一个输入特征,连线代表学到的系数,右边的结点代表输出, 是输入的加权求和。原创 2024-12-15 18:23:25 · 1312 阅读 · 0 评论 -
Python机器学习笔记(六、核支持向量机)
一种对高斯核的解释是它考虑所有阶数的所有可能的多项式,但阶数越高,特征的重要性越小。小的 gamma 值表示决策边界变化很慢,生成的是复杂度较低的模型,而大的 gamma 值则会生成更为复杂的模型。可以看到,左上角的图中,决策边界看起来几乎是线性的,误分类的点对边界几乎没有任何影响。幸运的是,有一种巧妙的数学技巧,让我们可以在更高维空间中学习分类器,而不用实际计算可能非常大的新的数据表示。C 参数是正则化参数,与线性模型中用到的类似,它限制每个点的重要性(或者更确切地说,每个点的 dual_coef_)。原创 2024-12-12 21:23:23 · 990 阅读 · 0 评论 -
Python机器学习笔记(五、决策树集成)
即使是非常大的数据集,随机森林的表现通常也很好, 训练过程很容易并行在功能强大的计算机的多个 CPU 内核上。每棵树只能对部分数据做出好的预测,因此,添加的树越来越多,可以不断迭代提高性能。背后的思想是,每棵树的预测可能都相对较好,但可能对部分数据过拟合, 如果构造很多树,并且每棵树的预测都很好,但都以不同的方式过拟合,那么可以对这些树的结果取平均值来降低过拟合。使用更多的 CPU 内核,可以让速度线性增加 (使用 2 个内核,随机森林的训练速度会加倍),但设置 n_jobs 大于内核个数是没有用的。原创 2024-12-07 17:29:46 · 805 阅读 · 0 评论 -
Python机器学习笔记(四、监督学习算法:朴素贝叶斯分类器和决策树)
虽然我们主要讨论的是用于分类的决策树,但对用于回归的决策树来说,所有内容都是类似的,在 DecisionTreeRegressor 中实现,回归树的用法和分析与分类树非常类似。观察 worst radius原创 2024-12-05 20:39:25 · 1584 阅读 · 0 评论 -
Python机器学习笔记(三、监督学习算法 线性回归)
线性模型在实践中被广泛使用和研究,有一百多年的历史了。线性模型利用输入特征的线性函数(linear function)进行预测。1. 用于回归的线性模型回归问题的线性模型预测一般公式如下:这里 x[0] 到 x[p] 表示单个数据点的特征(本例中特征个数为 p+1),w 和 b 是学习模型的参数,ŷ 是模型的预测结果。单一特征的数据集,公式如下:这是高中数学里的直线方程。 w[0] 是斜率,b 是 y 轴偏移。对于有多特征的数据集,w 包含沿每个特征坐标轴的斜率。或者,可以将预测的响应值看作输入特征的加权原创 2024-12-02 15:10:30 · 971 阅读 · 0 评论 -
Python机器学习笔记(二、监督学习算法基础)
换句话说,使用更少的邻居对应更高的模型复杂度,而使用更多的邻居对应更低的模型复杂度。假如考虑极端情况,即邻居个数等于训练集中所有数据点的个数, 那么每个测试点的邻居都完全相同(即所有训练点),所有预测结果也完全相同(即训练集中出现次数最多的类别)。利用单一邻居的预测结果就是最近邻的目标值。模型复杂度与训练数据集中输入的变化密切相关:数据集中包含的数据点的变化范围越大,在不发生过拟合的前提下可以使用的模型就越复杂。通常来说,收集更多的数据点可以有更大的变化范围,所以更大的数据集可以用来构建更复杂的模型。原创 2024-11-28 19:57:41 · 1329 阅读 · 0 评论 -
Python机器学习笔记(一、入门初探:以k近邻算法为例)
他收集了每朵鸢尾花的一些测量数据:花瓣的长度和宽度,花萼的长度和宽度,测量结果的单位都是厘米。矩阵的对角线是每个特征的直方图。对于这个模型来说,测试集的精度约为 0.97,也就是说,对于测试集中的鸢尾花,我们的预测有 97% 是正确的。要对一个新的数据点做出预测,算法会在训练集中寻找与这个新数据点距离最近的数据点,然后将找到的数据点的标签赋值给这个新数据点。k 近邻算法中 k 的含义是,可以考虑训练集中与新数据点最近的任意 k 个邻居(比如说,距离最近的 3 个或 5 个邻居),而不是只考虑最近的那一个。原创 2024-11-27 16:13:17 · 1456 阅读 · 0 评论