python机器学习实战
文章平均质量分 92
对于想要进入人工智能大门的开发者来说,很容易被各种各样的算法所劝退,本系列专栏采用通俗易懂的方法向你介绍各种算法,教你如何利用sklearn机器学习框架来学习和运用各种算法,带你进入人工智能的世界。
修炼之路
主要研究领域包括图像分类、目标检测、OCR、人脸识别等,搞过跨平台的深度学习模型的部署解决方案,设计过分布式的深度学习模型服务架构。
展开
-
分类算法中常用的评估指标
导读通常我们在解决某个问题的时候,会设计多种分类算法在训练的时候我们还会调节各种超参以及使用各种trick以获取最优的分类模型,那这时候我们应该如何来衡量这个最优呢?分类算法的评估指标有很多种,选择使用哪一种评估指标,应该根据实际情况来进行选择,而不能一概而定。混淆矩阵我们先来了解一下混淆矩阵,后面的分类评估指标其实都是在这个基础上发展而来,理解了这个,再去学习后面的评估指标就很简单了。混淆矩阵(confusion matrix):是机器学习领域和统计分类问题中常用的可视化工具,从名字上不能看出其原创 2020-09-27 22:18:18 · 1897 阅读 · 0 评论 -
使用奇异值分解提高协同过滤的推荐效果
在上一篇文章中,介绍过了矩阵分解和奇异值分解,这篇文章主要介绍奇异值分解的应用。通过SVD我们能够用小得多的数据来表示原始的样本数据,通过SVD可以去除噪声和冗余的信息。这篇文章主要介绍:1、SVD的优缺点2、使用python来实现SVD3、基于协同过滤来构建推荐系统4、基于SVD的图片压缩一、SVD的优缺点优点:简化数据,去除噪声,提高算法的结果。缺点:数据的转换难以理解。二、使用python来...原创 2018-05-09 22:45:59 · 1711 阅读 · 0 评论 -
基于协同过滤的推荐系统
这篇文章主要介绍一种协同过滤的推荐的算法,主要的内容包括:1、相似度的计算2、基于用户的协同过滤3、基于项目的协同过滤4、基于内容的过滤算法5、混合推荐系统推荐系统在现在的生活中随处可见,淘宝天猫的商品推荐,音乐软件的每日歌曲推荐等,协同过滤就是一种很受欢迎的推荐算法。协同过滤(collaborative filtering):利用某兴趣相投、拥有共同经验之群体的喜好来推荐用户感兴趣的信息。比如说...原创 2018-05-07 21:39:03 · 10244 阅读 · 2 评论 -
特征分解和奇异值分解
特征分解和奇异值分解在机器学习的应用中经常出现,在学习线性代数的时候也学习过。线性代数学完之后,之后去按照步骤去求解特征值和特征向量,也没搞明白特征值和特征向量究竟有什么作用。这篇文章的主要内容包括:1、什么是特征分解2、什么是奇异值分解3、如何求解特征值和特征向量4、特征值和特征向量有什么意义一、特征分解特征分解(eigendecomposition):是使用最广的矩阵分解之一,通过特征分解可以...原创 2018-05-05 19:18:49 · 3914 阅读 · 0 评论 -
聚类算法之DBSCAN划分高密度区域
关于聚类算法的前面两篇文章,已经介绍过了常用的原型聚类算法k-measn算法和层次聚类中的凝聚算法,这篇文章介绍一些密度聚类算法DBSCAN。k-means算法需要事先指定簇的个数,而凝聚不需要指定簇的个数,这两个算法会将所有的样本的划分到簇中,无法区分出噪声,k-means算法的簇空间是球状的,它们都无法很好的区分出高密度的区域。这篇文章主要介绍聚类算法中的DBSCAN算法,它划分出来的簇空间可...原创 2018-05-01 17:46:23 · 4236 阅读 · 2 评论 -
聚类算法之层次聚类
一、原型聚类和层次聚类原型聚类也称基于原型的聚类(prototype-based clustering),这类算法假设聚类结构能够通过一组原型刻画,先对原型进行初始化,然后对原型进行迭代更新求解。采用不同的原型表示、不同的求解方式,产生不同的算法。常用的原型聚类算法有k-means算法。层次聚类(hierarchical clustering)是一种基于原型的聚类算法,试图在不同层次对数据集进行划...原创 2018-04-30 01:13:32 · 49498 阅读 · 4 评论 -
K-Means算法详细介绍(SSE、轮廓分析)
在前面我们介绍过了很多的监督学习算法,分类和回归。这篇文章主要介绍无监督算法,通过聚类分析来处理无类标数据。我们事先并不知道数据的正确结果(类标),通过聚类算法来发现和挖掘数据本身的结构信息,对数据进行分簇(分类)。聚类算法的目标是,簇内相似度高,簇间相似度低。有点像LDA降维算法,类内方差最小,类间方差最大。这篇文章主要包括:1、K-Means算法2、K-Means++3、硬聚类和软聚类4、聚类...原创 2018-04-29 10:29:55 · 43789 阅读 · 6 评论 -
回归预测分析(RANSAC、多项式回归、残差图、随机森林)
在本篇文章中,主要是介绍利用波士顿房价数据来掌握回归预测分析的一些方法。通过本篇文章你可以学习到:1、可视化数据集的重要特征2、估计回归模型的系数3、使用RANSAC拟合高鲁棒性回归模型4、如何来评价回归模型5、多项式回归6、决策树回归7、随机森林回归数据集下载地址:https://archive.ics.uci.edu/ml/machine-learning-databases/housing/...原创 2018-04-26 22:05:23 · 19124 阅读 · 12 评论 -
使用flask将机器学习模型嵌入到web系统中(五)
在这篇文章中,主要介绍如何将一个机器学习的模型嵌入到web系统中,这篇文章的主要内容包括:1、利用flask构建一个简单的web2、将机器学习模型嵌入到web系统中3、根据用户的反馈来更新模型主要包括三个页面,评论提交页面、分类结果页面、感谢页面。当用户提交评论后跳转到结果页面,后台根据已有的模型来预测用户评论是属于正面评论还是负面评论,返回属于哪一种评论并且返回属于该种类的概率为多少...原创 2018-04-22 17:24:07 · 12760 阅读 · 17 评论 -
在线算法外存学习处理大数据集
在上一篇文章中,使用了logistic回归来对电影评论进行分类,消耗了2到3个小时,在使用网格搜索对50000条电影评论构建特征向量的时候计算成本是非常大的。在实际应用中,可能会遇见更大的数据集,如果直接把数据集加载到内存中,可能会超出计算机的最大内存,同时也会需要更久的训练时间。在这篇文章中,将介绍外存学习来处理大数据集,使用外存学习来处理50000条电影评论只需要1分钟。在梯度下降算法中,我们...原创 2018-04-19 21:51:49 · 1503 阅读 · 0 评论 -
logistic实现评论的分类(四)
在之前我们介绍了对电影评论的预处理的方法,分词、提取词干、去除停用词、提取句子的TF-IDF特征向量。在这篇文章中,我们将介绍使用评论的TF-IDF特征向量,使用logistic回归实现对评论的分类,并使用表格搜索来寻找最优参数。1、导入相关包import pandas as pdfrom sklearn.model_selection import train_test_splitfrom ...原创 2018-04-19 21:33:56 · 1419 阅读 · 1 评论 -
情感分析之词袋模型TF-IDF算法(三)
在这篇文章中,主要介绍的内容有:1、将单词转换为特征向量2、TF-IDF计算单词关联度在之前的文章中,我们已经介绍过一些文本的预处理和分词。这篇文章中,主要介绍如何将单词等分类数据转成为数值格式,以方便我们后面使用机器学习来训练模型。一、将单词转换为特征向量词袋模型(bag-of-words model):将文本以数值特征向量的形式来表示。主要通过两个步骤来实现词袋模型:1...原创 2018-04-14 00:28:36 · 10995 阅读 · 12 评论 -
对电影评论做情感分析之词干提取和停用词的移除(二)
这篇文章主要介绍如何将文本转换为特征向量前的一些准备工作,主要内容包括:1、清洗文本数据2、标记文档3、词袋模型一、清洗文本数据清洗文本需要将文本中所包含的一些不必要的字符删除。1、删除不必要的字符print(data["review"][0][-50:])is seven.<br /><br />Title (Brazil): Not Available发现评论中含有一些...原创 2018-04-09 21:50:56 · 5598 阅读 · 0 评论 -
对电影评论进行情感分析之文本数据的准备(一)
通过电影评论来做情感分析,主要包括下面几个主要内容:1、准备文本数据2、基于文本文档来构建特征向量3、训练机器学习模型来区分电影评论的正面评论和负面评论4、使用外存学习和在线学习算法来处理大数据在本篇文章中,主要介绍对于电影评论数据的准备工作。一、情感分析情感分析也称观点挖掘(opinion mining),是机器学习中自然语言处理(NLP)领域一个非常流行的分支,它主要是分析文档的情感倾向。二、...原创 2018-04-08 22:30:45 · 14681 阅读 · 9 评论 -
AdaBoost算法详细介绍
一、Boosting算法Boosting集成分类器包含多个非常简单的成员分类器,这些成员分类器的性能仅好于随机猜想,常被称为弱学习机。典型的弱学习机的例子就是单层决策树。Boosting算法主要针对难以区分的样本,弱学习机通过在分类错误的样本上进行学习来提高继承分类器的分类性能。Boosting与Bagging不同,在Boosting的初始化阶段采用的是无返回抽样从训练样本中随机抽取一个子集,而B...原创 2018-04-06 14:11:15 · 19978 阅读 · 0 评论 -
bagging通过bootstrap构建集成分类器
集成学习是将不同分类器组合成为一个元分类器,元分类器与其包含的当个分类器相比,元分类器具有更好的泛化性能。一、bagging集成分类器bagging没有使用相同的训练集拟合集成分类器中的单个成员分类器,bagging集成分类器的训练集使用了bootstrap抽样(有放回的随机抽样)。bagging可以提高不稳定模型的准确率,并且可以降低过拟合的程度。注:抽样后的子集T可以与其他的子集相同,因为是有...原创 2018-04-02 23:03:36 · 2037 阅读 · 0 评论 -
集成学习之多数投票预测
一、集成学习集成方法(ensemble method)是指,通过将不同的分类器组合成为一个元分类器,元分类器与包含的单个分类器相比,元分类器具有更好的泛化性能。常用的集成方法有多数投票(majority voting)原则,多数投票原则是指将大多数分类器预测的结果作为最终的预测类标,也就是说,将得票数超过50%的结果作为类标。严格的说,多数投票仅用于二分类的情况。但是,我们也可以将多数投票原则推广...原创 2018-04-01 22:54:30 · 7463 阅读 · 0 评论 -
评价分类模型的性能指标
当一个模型构建完成之后,我们可以通过几个不同的性能指标来衡量分类模型的相关性能,常用的分类性能指标有准确率(precision)、召回率(recall)和F1分数(F1-score)。一、混淆矩阵混淆矩阵(confusion matrix):是展示分类学习算法的一种性能矩阵(方阵),包括分类器预测结果真正(true positive)、真负(true negative)、假正(false ...原创 2018-03-28 22:52:59 · 13583 阅读 · 2 评论 -
通过网格搜索和嵌套交叉验证寻找机器学习模型的最优参数
在机器学习的模型中,通常有两类参数,第一类是通过训练数据学习得到的参数,也就是模型的系数,如回归模型中的权重系数,第二类是模型算法中需要进行设置和优化的超参,如logistic回归中的正则化系数和决策树中的树的深度参数等。在上一篇文章中,我们通过验证曲线来寻找最优的超参,在这篇文章中,将通过一种功能更为强大的寻找超参的技巧:网格搜索,它可以寻找最优的超参组合,来提高模型的性能。一、网格(grid ...原创 2018-03-25 22:56:39 · 8391 阅读 · 8 评论 -
通过验证曲线来判断机器学习模型的性能
当,一个机器学习的模型训练完成之后,我们应该如何来判断模型的性能。在上一篇文章中,我们使用了交叉验证的方法来估计模型的平均性能,这篇文章中,将介绍通过学习曲线来判断模型的偏差和方差问题,通过验证曲线来判断模型参数对于模型的过拟合和欠拟合问题。一、学习曲线判断模型的偏差和方差当模型在训练数据上构建的太复杂,这时候模型就有可能对训练数据出现过拟合,而对于未知数据的泛化能力就不好。对于模型的过拟合问题,...原创 2018-03-25 17:36:17 · 3814 阅读 · 0 评论 -
交叉验证评估模型性能
在构建一个机器学习模型之后,我们需要对模型的性能进行评估。如果一个模型过于简单,就会导致欠拟合(高偏差)问题,如果模型过于复杂,就会导致过拟合(高方差)问题。为了使模型能够在欠拟合和过拟合之间找到一个折中方案,我们需要对模型进行评估,后面将会介绍holdout交叉验证和k折交叉验证,通过这两种方法,我们可以获得一个模型泛化误差的可靠估计,也就是模型在新数据上的性能。一、holdout交叉验证hol...原创 2018-03-21 22:46:20 · 6881 阅读 · 5 评论 -
sklearn中的Pipeline类
一、数据集描述数据集使用的是威斯康星乳腺癌(Breast Cancer Wisconsin),数据集下载。一共包含569个恶性或者良性肿瘤细胞样本,第一列id是样本的唯一编号,,第二列表示的是样本对应的结果(M代表恶性,B代表良性)。3~32列包含了30个从细胞核照片中提取、用实数值标识的特征,用于构建判定模型,对肿瘤是良性还是恶性做出预测。二、Pipeline类的使用1、将字符类标转换为数值im...原创 2018-03-20 21:37:02 · 1728 阅读 · 0 评论 -
线性判别分析(LDA)降维
一、什么是线性判别分析?线性判别分析(Linear discriminant Analysis,LDA)与PCA类似也是一种特征抽取的算法,它能够提高数据分析过程中的计算效率。PCA是寻找数据集中方差最大的方向作为主成分分量的轴,而LDA是最优化分类的特征子空间。LDA和PCA都是用来降低数据维度的线性转换技巧。PCA属于无监督算法,LDA属于监督算法。相对于PCA算法而言,LDA更适合对于分类特...原创 2018-03-18 22:49:23 · 11540 阅读 · 2 评论 -
主成分分析(PCA)降维
在上一篇文章中,介绍过使用L1正则化和随机森林算法来进行特征选择。在这篇文章中,将介绍使用PCA来进行特征抽取实现降维。特征选择,是从原始的特征中选出一个特征子集。特征抽取,是通过对现有特征的信息进行推演,构造出一个新的特征子空间。可以理解为特征抽取是尽可能多地保证相关信息的情况下,来实现数据的压缩,特征抽取也可以提高计算效率。一、什么是主成分分析?主成分分析(principal componen...原创 2018-03-13 22:53:37 · 4084 阅读 · 0 评论 -
特征工程之特征选择
一、为什么要做特征选择?如果一个模型在训练数据上的表现比在测试数据上要好很多,这就表示这个模型过拟合了。过拟合是指模型的参数对于训练数据的特定观测值拟合的非常接近,而训练数据的分布于真实数据的分布并不一致,所以模型具有较高的方差。产生过拟合的原因是因为,对于训练数据集上的模型过于复杂,通常我们可以通过以下几种方式来降低过拟合:1、收集更多的训练数据2、通过正则化引入罚项3、选择一个参数相对较少的简...原创 2018-03-11 22:22:53 · 9375 阅读 · 0 评论 -
使用scikit-learn对特征进行归一化和标准化
一、为什么需要进行特征缩放?因为对于大多数的机器学习算法和优化算法来说,将特征值缩放到相同区间可以使得获取性能更好的模型。就梯度下降算法而言,例如有两个不同的特征,第一个特征的取值范围为1~10,第二个特征的取值范围为1~10000。在梯度下降算法中,代价函数为最小平方误差函数,所以在使用梯度下降算法的时候,算法会明显的偏向于第二个特征,因为它的取值范围更大。在比如,k近邻算法,它使用的是欧式距离...原创 2018-03-08 22:31:54 · 26503 阅读 · 0 评论 -
使用sklearn将数据集分为训练集和测试集
在使用机器学习算法之前,通常我们需要先将数据集分为训练集和测试集。在分配训练集和测试集的时候,如果测试集的数据越小,对模型的泛化误差的估计将会越不准确。所以,在划分数据集的时候我们需要进行权衡。在实际应用中,基于整个数据集数据的大小,训练集数据和测试集数据的划分比例是6:4、7:3或8:2。对于庞大的数据可以使用9:1,甚至是99:1。我们可以直接使用sklearn提供的train_test_sp...原创 2018-03-07 22:37:20 · 63144 阅读 · 2 评论 -
使用sklearn来处理类别数据
在处理真实的数据集的时候,我们经常会遇见一个或多个的类别数据的特征。类别数据可以被分为标称特征(nominal feature)和有序特征(ordinal feature)。有序特征指的是类别的值是有序的或者是可以排序的,例如,衣服的尺码S、M、X、XL、XXL...就是属于有序特征。再例如,衣服的颜色,黑色、蓝色、白色、黄色...这些就属于标称特征。一、有序特征的映射我们可以将有序特征装换成为整...原创 2018-03-06 22:54:27 · 11923 阅读 · 0 评论 -
数据的预处理之缺失值处理
在训练一个模型之前需要做数据的预处理,因为模型的最终效果决定于数据的质量和数据中蕴含的有用信息的数量。在实际的模型的训练样本数据中,样本可能会由于某些原因,造成一个或多个值的缺失。可能由于样本采集过程中的失误,或者度量方法对于某些特征不适用,或者数据未被填写等。在表格中缺失值通常是以空值的形式或者是NA(Not A Number)存在的。如果我们直接忽视这些缺失值可能有些算法无法处理这些缺失值,将...原创 2018-03-04 22:18:26 · 21612 阅读 · 0 评论 -
将决策树的过程可视化
在使用决策树算法进行分类的时候,有时候我们想看看决策树究竟是如何进行分类的。下面,将介绍使用sklearn来构建一个决策树,并导出决策树的结果dot文件,通过GraphViz将dot文件,保存成一张图片。一、决策树实现鸢尾花的分类from sklearn.tree import DecisionTreeClassifierfrom sklearn.tree import export_graph...原创 2018-02-28 23:06:11 · 4455 阅读 · 0 评论 -
初识决策树
决策树是机器学习中一种应用比较广泛的一种模型,比较常用的集成模型GBDT以及XGBOOST都是基于决策树。而且决策树在生活中也所处可见,下面用一个图例表示某一天的活动。上面的图例就是一个比较简单的决策树模型。决策树模型是基于一系列的问题来进行决策的,在处理实际问题的时候会比上面树要大的多。一颗决策树通常都会包括一个根结点(明天做什么?)、若干个内部结点(能够继续分)、若干个叶结点(不能继续分)。叶...原创 2018-02-28 21:03:10 · 799 阅读 · 0 评论 -
支持向量机之使用核SVM解决非线性分类问题
支持向量机算法除了能对线性问题进行分类之外,还可以对非线性可分的问题进行分类,我们可以很容易的使用“核技巧”来解决非线性可分问题。一、非线性问题在非线性的问题中,最经典的非线性问题,莫过于对于异或问题的分类了。下面,我们通过python来生成一个异或的数据集,代码如下if __name__ == "__main__": #随机生成200个点原创 2018-01-29 22:39:11 · 13518 阅读 · 4 评论 -
支持向量机之SMO算法
一、SMO算法序列最小化优化算法(Sequential minimal optimization,SMO)是一种用于解决支持向量机训练过程中所产生优化问题的算法。SMO由微软研究院的约翰·普莱特在1998发明,用于训练SVM。在SMO之前,SVM的训练必须使用复杂的方法,并需要昂贵的第三方二次规划工具。SMO算法将大优化问题分解为了多个小优化问题来求解的,这些小优化问题通常比较容易求解,并且对原创 2018-01-28 22:12:02 · 3685 阅读 · 5 评论 -
支持向量机之拉格朗日乘子法
在上一篇文章中,我们介绍过了支持向量机算法的核心思想,在这篇文章中,将介绍使用拉格朗日乘子法来最大化支持向量与超平面之间的距离,下面可能涉及到的数学计算比较多,我会尽可能的细化求解过程。一、找目标函数先看一张图我们将三角形的图标分为1类,将正方形图标分为-1类,通过红色直线(超平面)将1类和-1类分割开来,而其中1类的点和-1类的点距离超平面最近的点被称为支持向量,也就图中用红原创 2018-01-20 17:52:53 · 2429 阅读 · 0 评论 -
初识支持向量机(support vector machine)
在学习机器学习的时候,当学到支持向量机的时候可能会有一点懵了,这篇文章主要是像大家介绍一下支持向量机的思想,不会有过多的数学。在介绍之前,先看一个非常有意思的故事,故事来源于知乎,原文链接,故事是这样的:在很久以前的情人节,大侠要去救他的爱人,但魔鬼和他玩了一个游戏。魔鬼在桌子上似乎有规律放了两种颜色的球,说:“你用一根棍分开它们?要求:尽量在放更多球之后,仍然适用。”于是原创 2018-01-16 22:47:30 · 2930 阅读 · 0 评论 -
彻底搞懂逻辑斯蒂回归
在线性感知器算法中,我们使用了一个f(x)=x函数,作为激励函数,而在逻辑斯蒂回归中,我们将会采用sigmoid函数作为激励函数,所以它被称为sigmoid回归也叫对数几率回归(logistic regression),需要注意的是,虽然它的名字中带有回归,但事实上它并不是一种回归算法,而是一种分类算法。它的优点是,它是直接对分类的可能性进行建模的,无需事先假设数据分布,这样就避免了假设分布不准确原创 2018-01-01 11:29:15 · 42139 阅读 · 14 评论 -
随机梯度下降与批量梯度下降
一、批量梯度下降在实现线性感知器算法中,我们使用了梯度下降算法来最小化代价函数。在更新权重的过程中,我们所采用的是整个训练数据,这种梯度下降算法被称为批量梯度下降算法。当训练数据集达到了几百万甚至上亿条数据的规模的时候,批量梯度下降算法,就有点力不从心了。每更新一次权重,就使用所有的数据集来进行评估,这样会造成成本的浪费。所以,这个时候我们就可以采用,随机梯度下降或者小批量(随机选择100条数原创 2017-12-23 22:13:23 · 2404 阅读 · 1 评论 -
梯度下降算法数据的标准化预处理
在上一篇文章中使用了梯度下降算法来实现了自适应线性神经元。我们在更新权重的时候都有使用到学习率,并且默认的将学习率设置为了0.01,那么我们将学习率设置成0.01合适吗?在使用梯度下降算法,我们是直接将花的特征和花所对应的标签作为输入和输出,而没有进行数据的预处理操作,这对训练的模型会有什么影响呢?这篇文章中,我们主要讨论一下,学习率以及数据的预处理对于模型的影响。一、学习率对于模型的影响原创 2017-12-21 22:56:03 · 3194 阅读 · 0 评论 -
python实现自适应线性感知器算法
在之前的文章中有介绍过感知器,自适应线性神经网络(Adaptive Linear Neuron,Adaline)是在Frank Rosenblatt提取感知器算法之后的几年,Bernard Widrow和Tedd Hoff提出的Adaline算法,它是对感知器算法的改进。它的核心思想是通过对代价函数做最小优化,这也是机器学习算法的核心思想,以及之后的逻辑斯蒂回归、支持向量机等都采用了这种思想。Ad原创 2017-12-20 21:39:52 · 3309 阅读 · 0 评论 -
通过感知器实现对鸢尾花的分类
在上一篇文章我们用python实现感知器算法,这篇文章中将介绍如何通过感知器算法来实现对鸢尾花的分类。鸢尾花数据集地址https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data,一共包含了150组鸢尾花的数据,有三种不同的鸢尾花,每种鸢尾花都有4个特征。在这个例子中,选取了山鸢尾(setosa)和变色鸢尾(ver原创 2017-12-17 20:58:52 · 8224 阅读 · 0 评论