当前位置: 首页 > 科技观察

Python数据挖掘与机器学习技术介绍

时间:2023-03-12 22:35:07 科技观察

本文包含五个知识点:数据挖掘与机器学习技术介绍Python数据预处理实战常用分类算法1.数据挖掘与机器学习技术介绍什么是数据挖掘?数据挖掘是指对已有的一些数据进行处理和分析,最终获得数据与数据之间的深层关系的技术。比如在超市摆货时,是牛奶和面包放在一起卖的多,还是和其他商品放在一起卖的多。数据挖掘技术可以用来解决这些问题。具体来说,超市的商品投放问题可以分为关联分析场景。在日常生活中,数据挖掘技术被广泛应用。例如,商家经常需要对自己的客户进行分类(svip、vip、普通客户等),此时可以将一部分客户数据作为训练数据,另一部分客户数据作为测试数据。然后将训练数据输入模型进行训练,训练完成后输入另一部分数据进行测试,最终实现客户等级的自动划分。其他类似的应用实例还有验证码识别、水果品质自动筛选等。那么什么是机器学习技术呢?总而言之,凡是能够让机器通过我们建立的模型和算法,去学习数据之间的关系或者规则,最终我们可以使用的技术,就是机器学习技术。事实上,机器学习技术是一门交叉学科,大致可以分为两大类:传统机器学习技术和深度学习技术,其中深度学习技术包括神经网络相关技术。在本课程中,重点是传统的机器学习技术和各种算法。由于机器学习技术和数据挖掘技术都是探索数据之间的规律,人们通常将它们统称为。这两项技术在现实生活中也有着非常广泛的应用场景,其中几个经典的应用场景如下图所示:1.分类:机器学习如客户等级分类、验证码识别、水果品质自动筛选和数据挖掘技术可用于解决分类问题,如划分客户等级、识别验证码、自动筛选水果品质等。以验证码识别为例,需要设计一种识别由0到9的手写数字组成的验证码的方案。一种解决方案是先将0到9的一些手写数字分成训练集,然后将手动训练集,即将每个手写数字映射到其对应的数字类别,建立这些映射关系后,通过分类算法就可以建立对应的模型。这时候如果出现新的数字笔迹,模型就可以预测这个笔迹代表的数字,即它属于哪个数字类别。例如,如果模型预测一个手写体属于数字1的类别,那么这个手写体就可以被自动识别为数字1。因此,验证码识别问题本质上是一个分类问题。水果品质的自动筛选问题也是一个分类问题。水果的大小、颜色和其他特征也可以映射到相应的甜度类别。例如,类别1可以表示甜味,类别0可以表示非甜味。在得到一些训练集数据后,也可以使用分类算法来建立模型。这时候如果出现新的水果,它可以根据大小、颜色等特征自动判断甜不甜。这样就实现了水果品质的自动筛选。2、回归:预测连续数据、趋势预测等除了分类,数据挖掘技术和机器学习技术还有一个非常经典的场景——回归。在上面提到的分类场景中,类别的数量是有一定限制的。比如在数字验证码识别场景中,包含了0到9的数字类别;在字母验证码识别场景中,包含了从a到z的有限类别。不管是数字类还是字母类,分类的数量都是有限制的。现在假设有一些数据。映射之后,最好的结果不是落在0、1、2的某个点上,而是连续落在1.2、1.3、1.4……上。分类算法解决不了这种问题,回归分析算法可以这个时候用来解决。在实际应用中,回归分析算法可以实现对连续数据的预测和趋势预测。3、聚类:客户价值预测、商圈预测等什么是聚类?前文提到,要解决分类问题,必须有历史数据(即人为建立的正确训练数据)。如果没有历史数据,需要将一个对象的特征直接划分为其对应的类别,分类算法和回归算法都无法解决这个问题。这时候,就有了一个解决方案——集群。聚类方法直接根据对象的特征划分出相应的类别。它不需要训练,因此是一种无监督的学习方法。什么时候可以使用集群?如果数据库中有一组客户的特征数据,现在需要根据这些客户的特征直接划分客户的等级(如SVIP客户、VIP客户),那么可以使用聚类模型解决。此外,在预测商圈时,也可以使用聚类算法。4、相关性分析:超市商品投放与个性化推荐的相关性分析是指分析物品之间的相关性。比如超市里存放着大量的商品,现在需要分析这些商品之间的相关性,比如面包和奶制品之间的相关性强弱。这时候就可以采用相关性分析算法,借助用户的购买记录等信息,直接分析这些商品之间的相关性。了解了这些商品的相关性后,就可以应用到超市商品的摆放上了。通过将高度相关的商品放在相似的位置,可以有效提高超市商品的销量。此外,关联分析还可以用于个性化推荐技术。例如,可以借助用户的浏览记录,分析各个网页之间的关联性,在用户浏览网页时,向用户推送强关联的网页。例如,通过分析浏览记录数据,发现网页A和网页C之间存在很强的相关性,那么当用户浏览网页A时,就可以向其推送网页C,从而实现个性化推荐。5、自然语言处理:文本相似度技术、聊天机器人等。除了上述应用场景外,数据挖掘和机器学习技术还可以用于自然语言处理和语音处理等。例如,文本的计算相似性和聊天机器人。2.Python数据预处理实践在进行数据挖掘和机器学习之前,第一步是对已有的数据进行预处理。即使初始数据不正确,也无法保证最终结果是正确的。只有对数据进行预处理,保证其准确性,才能保证最终结果的正确性。数据预处理是指对数据进行初步处理,对脏数据(即影响结果准确性的数据)进行处理,否则容易影响最终结果。常见的数据预处理方法如下图所示:1.缺失值处理缺失值是指一组数据中某行数据缺失的某个特征值。解决缺失值的方法有两种。一种是删除缺失值所在的数据行,另一种是在缺失值上加上一个正确的值。2.离群值处理离群值的原因往往是数据采集时出现错误,比如采集数字68时出错,误采集为680。在处理异常值之前,自然要先发现这些异常值数据,而这些异常值数据往往可以通过绘图的方式找到。异常值数据经过处理后,原始数据趋于正确,可以保证最终结果的准确性。3.数据整合与上述缺失值处理和异常值处理相比,数据整合是一种相对简单的数据预处理方法。那么什么是数据集成呢?假设有两组相同结构的数据A和数据B,并且两组数据都已经加载到内存中。这时候如果用户想把这两组数据合并成一组数据,可以直接使用Pandas来进行合并,而合并的过程其实就是数据整合。下面以淘宝商品数据为例介绍上述预处理的实战。在进行数据预处理之前,首先需要从MySQL数据库中导入淘宝商品数据。打开MySQL数据库后,查询taob表,得到如下输出:可以看到taob表中有四个字段。其中,title字段用于存储淘宝商品名称;link字段存储淘宝商品的链接;价格存储淘宝商品的价格;评论存储淘宝商品的评论数(一定程度上代表商品的销量)。那么如何导入这些数据呢?首先通过pymysql连接数据库(如果出现乱码,修改pymysql源码)。连接成功后,获取taob中的所有数据,然后使用pandas方法中的read_sql()将数据加载到内存中。read_sql()方法有两个参数,第一个参数是sql语句,第二个参数是MySQL数据库的连接信息。具体代码如下:1.缺失值处理实际的数据清洗可以用来处理缺失值。以上面的淘宝商品数据为例,某个商品的评论数可能为0,但它的价格不可能为0,但实际上数据库中有一些价格值为0的数据。出现这种情况的原因是部分数据的价格属性没有爬升。那么如何判断这些数据中存在缺失值呢?可以用下面的方法来区分:首先,调用前面taob表的data.describe()方法,会出现下图所示的结果:如何理解这个统计结果?第一步是观察价格和评论字段的计数数据。如果两者不相等,说明一定有信息缺失;如果两者相等,暂时看不出是否存在缺失的情况。比如price的条数是9616.0000条,comment的条数是9615.0000条,说明至少少了一条评论数据。其他字段的含义是:mean代表均值;std代表标准偏差;min代表最小值;max表示最大值。那么如何处理这些缺失的数据呢?一种方法是删除数据,另一种方法是在缺失值所在的位置插入一个新值。第二种方法中的取值可以是平均值,也可以是中位数,具体使用平均值还是中位数需要根据实际情况确定。比如年龄(1到100岁)的数据,这种稳定变化的数据,差异不大,一般插入平均值,变化区间比较大的数据一般插入中位数。处理价格缺失值的具体操作如下:2、异常值处理实战与缺失值的处理过程类似。如果要处理异常值,首先要找到异常值。离群点往往是通过绘制散点图来发现的,因为相似的数据会集中在散点图中的一个区域,异常的数据会远离这个区域分布。根据这个性质,可以很方便的找出数据中的异常值。具体操作如下图所示:首先,需要从数据中提取价格数据和评论数据。通常的方法可以借助循环来提取,但是这种方法太复杂了。有一种简单的方法来转置数据框。这时候原来的列数据就变成了当前行数据,就可以轻松获取到价格了。数据和审查数据。接下来通过plot()方法绘制散点图。plot()方法第一个参数代表横坐标,第二个参数代表纵坐标,第三个参数代表图形的类型,“o”代表散点图。最后通过show()方法显示出来,可以直观的观察异常值。这些异常值对数据的分析没有帮助。在实际操作中,往往需要将这些异常值所代表的数据删除或转换为正常值。下图是绘制的散点图:根据上图,对评论大于10万,价格大于1000的数据进行处理,达到处理异常值的效果。两种具体处理方法的实现过程如下:第一种是改变数值的方法,将其改变为中位数、平均值或其他值。具体操作如下图所示:第二种方法是删除异常数据,也就是直接删除异常数据,也是比较推荐的方法。具体操作如下图所示:3.分布分析分布分析是指对数据的分布状态进行分析,即观察是线性分布还是正态分布。一般采用绘制直方图的方法进行分布分析。直方图的绘制有以下几个步骤:计算极差,计算组距离,绘制直方图。具体操作如下图所示:其中,arrange()方法用于制定样式。arrange()方法的第一个参数代表最小值,第二个参数代表最大值,第三个参数代表组距离。接下来,使用hist()方法绘制直方图。taob表中淘宝商品价格直方图如下图,大致符合正态分布:taob表中淘宝商品评论直方图如下图,大致呈递减曲线:4.词云图的绘制有时候往往需要根据一段文字信息来绘制词云图。绘图的具体操作如下:实现的大致过程是:首先使用cut()对文档中的词进行切词,切词完成后,将这些词组织成固定的格式,然后根据读取相应的图片到需要的词云显示形式(下图中的词云是猫的形状),然后使用wc.WordCloud()转换词云,最后通过imshow()显示对应的词云图。例如根据老九门.txt文档绘制的词云图效果如下图所示:3.常用分类算法介绍常用的分类算法有很多,如下图所示:其中,KNN算法和贝叶斯算法是比较重要的算法,此外还有其他算法,如决策树算法、逻辑回归算法和SVM算法。Adaboost算法主要用于将弱分类算法转化为强分类算法。4.以鸢尾花分类为例如果有一些鸢尾花数据,这些数据包含了鸢尾花的一些特征,比如花瓣长度、花瓣宽度、萼片长度和萼片宽度四个特征。有了这些历史数据,就可以用这些数据来训练分类模型了。模型训练完成后,当出现新的未知类型的鸢尾花时,可以使用训练好的模型来判断鸢尾花的种类。.这个案例有不同的实现方法,但是哪种分类算法会更好呢?1.KNN算法(1)、KNN算法介绍首先考虑这样一个问题,在上面的淘宝商品中,有三类商品,分别是零食、名牌包和电器。它们都有两个特点:价格和评论。按价格排序,名牌包最贵,电器次之,零食最便宜;按评论数排序,零食评论最多,电器次之,名牌包包最少。然后建立一个以价格为x轴,comment为y轴的笛卡尔坐标系,画出这三类商品在坐标系中的分布情况,如下图所示:显然可以发现这三类商品集中在不同的区域。如果现在出现具有已知特征的新商品,请使用?代表新商品。根据其特性,产品在坐标系中的位置如图所示。这三类产品中哪一类产品最有可能是?这类问题可以使用KNN算法来解决。算法的实现思路是:计算未知商品到其他商品的欧氏距离之和,然后对它们进行排序。距离之和越小,说明未知商品与该商品越相似。例如,经过计算,发现未知产品与电气产品的欧氏距离之和最小,则可以认为该产品属于电气产品。(2)实现方法上述过程的具体实现如下:当然也可以直接调整包,更加简洁方便。缺点是使用它的人无法理解它的原理:(3)、先用KNN算法解决鸢尾花的分类问题加载鸢尾花数据。具体的加载方案有两种。一种是直接从iris数据集读取。设置完路径后,通过read_csv()方法读取数据集的特征和结果分离。具体操作如下:还有一个loading方法,就是用sklearn来实现加载。sklearn的数据集带有iris的数据集。使用datasets的load_iris()方法,可以加载数据,然后也可以得到特征和类别,然后可以分离训练数据和测试数据(一般做交叉验证),具体使用train_test_split()方法进行分离。该方法的第三个参数代表测试比例,第四个参数为随机种子。具体操作如下:加载完成后,可以调用上面提到的KNN算法进行分类up。2.贝叶斯算法(1)贝叶斯算法简介首先介绍朴素贝叶斯公式:P(B|A)=P(A|B)P(B)/P(A)。如果有一些课程数据,如下表,价格和课时数是课程的特征,销量是课程的结果。如果出现新课程,价格高,课时大,根据已有数据预测新课程。课程销售。显然这个问题属于分类问题。首先对表格进行处理,将feature1和feature2转化为数字,即0表示低,1表示中,2表示高。数字化后,[[t1,t2],[t1,t2],[t1,t2]]-----[[0,2],[2,1],[0,0]],然后转置这个二维列表(为了后续统计),得到[[t1,t1,t1],[t2,t2,t2]]------[[0,2,0],[2,1,0]]。其中,[0,2,0]代表每门课程的价格,[2,1,0]代表每门课程的学时数。原来的问题可以等价于求新课程在价格高、课时高的情况下销量高、中、低的概率。即P(C|AB)=P(AB|C)P(C)/P(AB)=P(A|C)P(B|C)P(C)/P(AB)=》P(A|C)P(B|C)P(C),其中C有三种情况:c0=高,c1=中,c2=低。最后需要比较P(c0|AB)、P(c1|AB)和P(c2|AB)的大小,P(c0|AB)=P(A|C0)P(B|C0)P(C0)=2/4*2/4*4/7=1/7P(c1|AB)=P(A|C1)P(B|C1)P(C1)=0=0P(c2|AB)=P(A|C2)P(B|C2)P(C2)=0=0显然,P(c0|AB)最大,可以预见这门新课的销量会高。(2)实现方法同KNN算法。贝叶斯算法也有两种实现方式,一种是详细实现:一种是综合实现:3.决策树算法决策树算法是基于信息熵的,理论上算法的计算过程分为以下几个步骤:先计算总信息熵,计算每个特征的信息熵,计算E和信息增益,E=总信息熵-信息增益,信息增益=总信息熵-E越小,信息增益越大,不确定因素较小。决策树是指多特征数据。对于第一个特征,是否考虑这个特征(0表示不考虑,1表示考虑)会形成一个二叉树,然后对第二个特征同样考虑……直到所有特征都考虑到,最后形成决策树。下图是一棵决策树:决策树算法的实现过程是:先取出数据的类别,然后对数据的描述进行变换(比如将“是”转化为1,“否”转化为0)、借助sklearn的DecisionTreeClassifier构建决策树,使用fit()方法进行数据训练,训练完成后直接使用predict()得到预测结果,最后使用export_graphviz可视化决策树.具体实现过程如下图所示:4.逻辑回归算法逻辑回归算法是借助于线性回归的原理来实现的。如果有一个线性回归函数:y=a1x1+a2x2+a3x3+...+anxn+b,其中x1到xn代表每一个特征,虽然可以用这条直线来拟合,但是因为y的范围太大大的话,会鲁棒性太差。如果要实现分类,需要将y的范围缩小到一定的空间,比如[0,1]。这时可以通过代入法缩小y的范围:令y=ln(p/(1-p))则:e^y=e^(ln(p/(1-p)))=>e^y=p/(1-p)=>e^y*(1-p)=p=>e^y-p*e^y=p=>e^y=p(1+e^y)=>p=e^y/(1+e^y)=>p属于[0,1]使得y的范围缩小,从而实现准确分类,进而实现逻辑回归。逻辑回归算法对应的实现过程如下图所示:5.SVM算法SVM算法是一种精确分类的算法,但其可解释性不强。它可以将低维空间中的线性不可分问题转化为高维空间中的线性不可分问题。SVM算法的使用很简单,直接导入SVC,然后训练模型,进行预测。具体操作如下:虽然实现起来很简单,但是算法的关键在于如何选择核函数。核函数可以分为以下几类,每一种核函数也适用于不同的情况:线性核函数多项式核函数径向基核函数Sigmoid核函数对于不是特别复杂的数据,线性核函数或者多项式核函数都可以使用。对于复杂数据,使用径向基核函数。各核函数绘制的图像如下图所示:5.Adaboost算法如果存在单层决策树算法,则属于弱分类算法(准确率很低的算法)。如果想加强这个弱分类器,可以使用boost的思想来实现,比如使用Adaboost算法,即进行多次迭代,每次分配不同的权重,计算错误率并调整同时加权,最终形成一个综合结果。Adaboost算法一般不会单独使用,而是结合起来对那些弱分类算法进行强化。5.选择分类算法的思路和技巧首先要看是二分类问题还是多分类问题。如果是二分类问题,一般可以使用这些算法;如果是多分类问题,可以使用KNN和贝叶斯算法。其次,检查是否需要高解释性。如果要求高可解释性,则不能使用SVM算法。看训练样本数,再看训练样本数。如果训练样本数量过多,则不适合使用KNN算法。最后,需要进行弱-强算法转换,必要时使用Adaboost算法,否则不要使用Adaboost算法。如果不确定,可以选择一些数据进行验证,进行模型评估(耗时和准确性)。综上所述,各种分类算法的优缺点可以归纳如下:KNN:多分类,lazycall,不适合训练数据太大Bayesian:多分类,计算量大,特征间无相关性决策树算法:二分类,可解释性非常好Logistic回归算法:二分类,特征相关与否无所谓SVM算法:二分类,效果比较好,但可解释性欠缺Adaboost算法:适合加强弱分类算法