zoukankan      html  css  js  c++  java
  • 4.初识数据分析/机器学习

    本文主要引出数据分析过程当中涉及到的各个知识点,以便快速了解数据分析的大体框架和流程,后续会详细补充对每个知识点的理解和运用。

    python数据分析基本流程(粗糙版):

    1). 需求分析:项目技术、产品和应用调研;

    2). 数据采集:自有数据源/Python爬虫技术获取;

    3). 数据清洗: 异常样本的处理;

    4). 数据分析与可视化:探索性数据分析,统计绘图;

    5). 特征工程:建立在数据清洗的基础上,数据预处理、特征选择、特征变换与提取、特征组合、特征降维等;

    6). 机器学习建模与调优:sklearn库里调用相应模型;

    7). 机器学习模型结果与报告输出:建模基础上的决策,机器学习模型结果展示,数据分析报告,机器学习报告的撰写等。

    理解探索性数据分析
    探索性数据分析(Exploratory Data Analysis,EDA)是采用各种技术(大部分为可视化技术)在尽量少的先验假设条件下,探索数据内部结构和规律的一种数据分析方法或理念,也是常用特征工程中发现好的特征方法。
    探索性数据分析可分为两类:一类是可视化技术,如箱形图、直方图、多变量图、主成分分析、多线性主成分分析、降维、非线性降维等,进行缺失值展示与探索,异常值与离群点展示与探索,目标变量重点分析,自变量与目标变量相关分析,统计绘图与可视化展示;另一类是定量技术,如样本均值、方差、分位数、峰度、偏度等数据基本概况(统计定量分析)。
    通过探索性数据分析可以探索出:数据分布如何?数据里有什么内容?从数据中能找到什么对分析有用的线索?

     python数据分析基本流程(精细版):

    特征工程其本质是一项工程活动,目的是最大限度地从原始数据中提取特征以供算法和模型使用。通过总结和归纳,人们认为特征工程包括以下方面:

    一、数据清洗

    数据清洗的目的:

    一是为了解决数据质量问题。保证数据的完整性,比如人的属性中缺少性别、籍贯、年龄等;保证数据的唯一性,比如不同来源的数据出现重复的情况;保证数据的权威性,比如同一个指标出现多个来源的数据,且数值不一样;保证数据的合法性,比如数据与常识不符,市区内开车速度到达了400km/h;保证数据的一致性,比如不同来源的不同指标,实际的内涵与表示意义是一样的。数据清洗的结果是对各种脏数据进行对应标准的干净的、连续的数据,提供给数据统计、数据挖掘等使用。

    1、数据完整性问题。解决思路:数据补全。通过其他信息补全,比如通过身份证号码推算性别、籍贯、出生日期、年龄等;通过前后数据补全,例如时间序列确实,可以使用前后的均值填充,缺的数据多了,可以使用平滑处理;实在补不全的,必须剔除,但是不要删除,说不定以后用得上。

    2、数据唯一性问题。解决思路:去除重复记录,只保留一条。按照主键去重,用sql或者excel去除重复记录即可;按照规则去重,编写一系列规则,对重复情况负责的数据去重,例如不同渠道来的客户数据,可以通过相同的关键信息进行匹配,合并去重。

    3、数据权威性问题。解决思路:用最权威那个渠道的数据。对不同渠道设定权威级别,然后再不同场合下选最重要的。

    4、数据合法性问题。解决思路:设定判定规则。(1)设定强制合法规则,凡事不在规则范围内的,强制设置最大值以及最小值,剔除或者判断为无效;字段类型合法规则:日期字段格式过滤;字段内容合法规则:性别 in(男、女、未知));出生日期《=今天;(2)设定警告规则,凡是不在规则范围内的,进行警告然后人工处理;(3)离群值人工特殊处理,使用分箱、聚类、回归等方式发现离群值。

    5、结局数据一致性问题。解决思路:数据体系。指标体系(度量),维度(分组、统计口径),单位,频度,数据。

     二是让数据更加适合做挖掘。比如高纬度-不适合挖掘;低纬度-不适合挖掘;无关信息-减少存储;字段冗余-一个字段是其他字段计算出来的,会造成相关系数为1或者主成分分析异常;多指标数据、单位不同-如GDP与城镇居民人居收入数值相差过大。

    1、解决高纬度问题。解决思路:降维。(1)主成分分析;(2)随机森林。

    2、解决低纬度或者缺少维度。解决思路:抽象。(1)各种汇总、平均、加总、最大、最小等;(2)各种离散化、聚类、自定义分组等。

    3、解决无关信息和字段冗余。解决思路:剔除字段。

    4、解决多指标数值、单位不同问题。解决思路:归一化。(1)最小-最大;(2)0-均值;(3)小数定标。

    数据清洗的标准流程:

    数据清洗之前先将数据导入处理;然后宏观查看数据,这里包含两个部分:一是看元数据,包括字段解释、数据来源、代码表等等一切描述数据的信息;二是抽取一部分数据,使用人工查看方式,对数据本身有一个直观的了解,并且初步发现一些问题,为之后的处理做准备。

    第一步:缺失值清洗

    缺失值是最常见的数据问题,处理缺失值也有很多方法,我建议按照以下四个步骤进行:

    1、确定缺失值范围:对每个字段都计算其缺失值比例,然后按照缺失比例和字段重要性,分别制定策略,可用下图表示:

    2、去除不需要的字段:这一步很简单,直接删掉即可……但强烈建议清洗每做一步都备份一下,或者在小规模数据上试验成功再处理全量数据,不然删错了会追悔莫及(多说一句,写SQL的时候delete一定要配where!)。

    3、填充缺失内容:某些缺失值可以进行填充,方法有以下三种:以业务知识或经验推测填充缺失值;以同一指标的计算结果(均值、中位数、众数等)填充缺失值;以不同指标的计算结果填充缺失值。前两种方法比较好理解,关于第三种方法,举个最简单的例子:年龄字段缺失,但是有屏蔽后六位的身份证号,so……

    4、重新取数:如果某些指标非常重要又缺失率高,那就需要和取数人员或业务人员了解,是否有其他渠道可以取到相关数据。

    以上,简单的梳理了缺失值清洗的步骤,其中有一些内容远说的复杂,比如填充缺失值。很多讲统计方法或统计工具的书籍会提到相关方法,有兴趣的可以自行深入了解。

    第二步:格式内容清洗

    如果数据是由系统日志而来,那么通常在格式和内容方面,会与元数据的描述一致。而如果数据是由人工收集或用户填写而来,则有很大可能性在格式和内容上存在一些问题,简单来说,格式内容问题有以下几类:

    1、时间、日期、数值、全半角等显示格式不一致:这种问题通常与输入端有关,在整合多来源数据时也有可能遇到,将其处理成一致的某种格式即可。

    2、内容中有不该存在的字符:某些内容可能只包括一部分字符,比如身份证号是数字+字母,中国人姓名是汉字(赵C这种情况还是少数)。最典型的就是头、尾、中间的空格,也可能出现姓名中存在数字符号、身份证号中出现汉字等问题。这种情况下,需要以半自动校验半人工方式来找出可能存在的问题,并去除不需要的字符。

    3、内容与该字段应有内容不符:姓名写了性别,身份证号写了手机号等等,均属这种问题。 但该问题特殊性在于:并不能简单的以删除来处理,因为成因有可能是人工填写错误,也有可能是前端没有校验,还有可能是导入数据时部分或全部存在列没有对齐的问题,因此要详细识别问题类型。

    格式内容问题是比较细节的问题,但很多分析失误都是栽在这个坑上,比如跨表关联或VLOOKUP失败(多个空格导致工具认为“陈丹奕”和“陈 丹奕”不是一个人)、统计值不全(数字里掺个字母当然求和时结果有问题)、模型输出失败或效果不好(数据对错列了,把日期和年龄混了,so……)。因此,请各位务必注意这部分清洗工作,尤其是在处理的数据是人工收集而来,或者你确定产品前端校验设计不太好的时候……

    第三步:逻辑错误清洗

    这部分的工作是去掉一些使用简单逻辑推理就可以直接发现问题的数据,防止分析结果走偏。主要包含以下几个步骤:

    1、去重:有的分析师喜欢把去重放在第一步,但我强烈建议把去重放在格式内容清洗之后,原因已经说过了(多个空格导致工具认为“陈丹奕”和“陈 丹奕”不是一个人,去重失败)。而且,并不是所有的重复都能这么简单的去掉……当然,如果数据不是人工录入的,那么简单去重即可。

    2、去除不合理值:一句话就能说清楚,有人填表时候瞎填,年龄200岁,年收入100000万(估计是没看见”万“字),这种的就要么删掉,要么按缺失值处理。这种值如何发现?提示:可用但不限于箱形图(Box-plot).

    3、修正矛盾内容:有些字段是可以互相验证的,举例:身份证号是1101031980XXXXXXXX,然后年龄填18岁,我们虽然理解人家永远18岁的想法,但得知真实年龄可以给用户提供更好的服务啊(又瞎扯……)。在这种时候,需要根据字段的数据来源,来判定哪个字段提供的信息更为可靠,去除或重构不可靠的字段。逻辑错误除了以上列举的情况,还有很多未列举的情况,在实际操作中要酌情处理。另外,这一步骤在之后的数据分析建模过程中有可能重复,因为即使问题很简单,也并非所有问题都能够一次找出,我们能做的是使用工具和方法,尽量减少问题出现的可能性,使分析过程更为高效。

    第四步:非需求数据清洗:这一步说起来非常简单:把不要的字段删了。但实际操作起来,有很多问题,例如:把看上去不需要但实际上对业务很重要的字段删了;某个字段觉得有用,但又没想好怎么用,不知道是否该删;一时看走眼,删错字段了。前两种情况:如果数据量没有大到不删字段就没办法处理的程度,那么能不删的字段尽量不删。第三种情况,请勤备份数据……

    第五步:关联性验证:如果你的数据有多个来源,那么有必要进行关联性验证。例如,你有汽车的线下购买信息,也有电话客服问卷信息,两者通过姓名和手机号关联,那么要看一下,同一个人线下登记的车辆信息和线上问卷问出来的车辆信息是不是同一辆,如果不是(业务流程设计不好是有可能出现这种问题的!),那么需要调整或去除数据。严格意义上来说,这已经脱离数据清洗的范畴了,而且关联数据变动在数据库模型中就应该涉及。注意多个来源的数据整合是非常复杂的工作,一定要注意数据之间的关联性,尽量在分析过程中不要出现数据之间互相矛盾,而你却毫无察觉的情况。

     

    二、样本分布不均

    样本分布不均衡就是指样本差异非常大,例如共1000条数据样本的二分类数据集中,其中一种类别只有10条样本数据,而另一只类别有990条,此时属于严重的样本分布不均衡。

    为何要解决样本分布不均:样本不均衡将导致样本量少的分类所包含的特征过少,很难从中提取规律,即使得到分类模型,也容易产生过度依赖于有限的数量样本而导致过拟合问题,当模型应用到新的数据上时,模型的准确性和健壮性将会很差。

    样本分布不均的解决方法:(1).过采样 通过增加分类中样本较少的类别的采样数量来实现平衡,最直接的方法是简单复制小样本数据,缺点是如果特征少,会导致过拟合的问题。经过改进的过抽样方法通过在少数类中加入随机噪声、干扰数据或通过一定规则产生新的合成样本。(2).欠采样 通过减少分类中多数类样本的数量来实现样本均衡,最直接的方法是随机去掉一些多数类样本来减小多数类的规模,缺点是会丢失多数类中的一些重要信息。(3).设置权重 对不同样本数量的类别赋予不同的权重(通常会设置为与样本量成反比)(4).集成方法 每次生成训练集时使用所有分类中的小样本量,同时从分类中的大样本量中随机抽取数据来与小样本量合并构成训练集,这样反复多次会得到很多训练集和训练模型。最后在应用时,使用组合方法(例如投票、加权投票等)产生分类预测结果。这种方法类似于随机森林。缺点是,比较吃计算资源,费时。

    三、特征工程

    特征工程其实就是将原始的数据转换为更好地代表预测模型的潜在问题的特征过程,从而提高对未知数据的预测准确率(增加了模型的泛化能力)(大白话:将不利于计算的数据转化成利于计算的)。比如资讯APP要对文章进行分类,那么直接把文章拿过去学习,那机器怎么能认识了。我们可以将文字映射成数字,然后提取关键的字,提高分类的准确性。特征处理是特征工程的核心部分,sklearn提供了较为完整的特征处理方法,包括数据预处理,特征选择,降维等。首次接触到sklearn,通常会被其丰富且方便的算法模型库吸引,但是这里介绍的特征处理库也十分强大!

    在机器学习应用中,特征工程扮演着重要的角色,可以说特征工程是机器学习应用的基础。在机器学习界流传着这样一句话:“数据和特征决定决定了机器学习算法的上限,而模型和算法只是不断逼近这个上限而已”。在机器学习应用中,特征工程介于“数据”和“模型”之间,特征工程是使用数据的专业领域知识创建能够使机器学习算法工作的特征的过程。美国计算机科学家Peter Norvig有两句经典名言:“基于大量数据的简单模型胜于基于少量数据的负责模型。”以及“更多的数据胜于聪明的算法,而好的数据胜于多的数据。”因此,特征工程的前提便是收集足够多的数据,其次则是从大量数据中提取关键信息并表示为模型所需要的形式。合适的特征可以让模型预测更加容易,机器学习应用更有可能成功。

    1. 数据预处理:通过特定的统计方法(数学方法)将数据转换成算法要求的数据。

    使用sklearn中的preproccessing库来进行数据预处理。

    (1). 缩放:常见的缩放有:标准化、最大最小值缩放(归一化)、Box-Cox变换、对数变换等数学变换操作。标准化的前提是特征值服从正态分布,标准化后,其转换成标准正态分布。常用的方法有:z-score标准化,即零-均值标准化,y=(x-μ)/σ。经过处理后的数据均值为0,标准差为1。归一化常用的方法有: min-max归一化y=(x-min)/(max-min)  。标准化与归一化的区别:简单来说,标准化是依照特征矩阵的列处理数据,其通过求z-score的方法,将样本的特征值转换到同一量纲下。归一化是依照特征矩阵的行处理数据,其目的在于样本向量在点乘运算或其他核函数计算相似性时,拥有统一的标准,也就是说都转化为“单位向量”。

    1 # 使用preproccessing库的StandardScaler类对数据进行标准化
    2 from sklearn.preprocessing import StandardScaler
    3 
    4 # 使用preproccessing库的MinMaxScaler类对数据进行归一化
    5 from sklearn.preprocessing import MinMaxScaler
    6 
    7 #使用preproccessing库的Normalizer类对数据进行归一化
    8 from sklearn.preprocessing import Normalizer

    (2). 对定量特征二值化(离散化):定量特征二值化的核心在于设定一个阈值,大于阈值的赋值为1,小于等于阈值的赋值为0。对于某些定量特征,其包含的有效信息为区间划分,例如学习成绩,假若只关心“及格”或不“及格”,那么需要将定量的考分,转换成“1”和“0”表示及格和未及格。二值化可以解决这一问题。

    1 # 使用preproccessing库的Binarizer类对数据进行二值化
    2 from sklearn.preprocessing import Binarizer

    (3). 截断:对于连续型数值特征,有时候太多的精度可能只是噪声,所以可以在保留重要信息的前提下对特征进行阶段,截断后的特征也可以看作是类别特征。另外,至于长尾的数据,可以先进行对数转换,然后进行截断。

    (4). 分箱/分区/分桶:有时候,将数值型属性转换成类别呈现更有意义,同时能使算法减少噪声的干扰,通过将一定范围内的数值划分成确定的块。举个例子,我们预测一个人是否拥有某款衣服,这里年龄是一个确切的因子。其实年龄组是更为相关的因子,所有我们可以将年龄分布划分成1-10,11-18,19-25,26-40等。而且,不是将这些类别分解成2个点,你可以使用标量值,因为相近的年龄组表现出相似的属性。分桶可以看作是对数值变量的离散化。

    (5). 对定性特征进行独热编码:独热编码是使用一个二进制的位来表示某个定性特征的出现与否。某些机器学习算法和模型只能接受定量特征的输入,那么需要将定性特征转换为定量特征。一些属性是类别型而不是数值型,举一个简单的例子,由{红,绿、蓝}组成的颜色属性,最常用的方式是把每个类别属性转换成二元属性,即从{0,1}取一个值。因此基本上增加的属性等于相应数目的类别,并且对于你数据集中的每个实例,只有一个是1(其他的为0),这也就是独热(one-hot)编码方式(类似于转换成哑变量)。

    1 # 使用preproccessing库的OneHotEncoder类对数据进行哑编码
    2 from sklearn.preprocessing import OneHotEncoder

    注意上面的(1),(2),(3),(4)是数值特征的处理方法,(5)是类别变量的处理方法。

    (6). 时间特征:时间特征在实际应用中,往往是一个非常重要的因素,时间戳属性通常需要分离成多个维度比如年、月、日、小时、分钟、秒钟。

    (7). 缺失值处理:1.pandas里面的isnull()检测缺失值筛选出来,fillna()填充缺失值,可找前一个也可后一个(不合理);2.replace映射可以替换;3.sklearn里面的缺失值填充方式(功能比较上面的强大)

    1 # sklearn缺失值填充方法的类
    2 from sklearn.preprocessing import Imputer

    特征选择是特征工程中的重要问题(另一个重要的问题是特征提取)


    2. 特征选择:为了得到更好的模型,使用某些算法自动的选出原始特征的子集。这个过程,不会构建或修改已拥有的特征,但是会通过修剪特征来达到减少噪声和冗余。那些和我们解决的问题无关需要被移除的属性,在我们的数据特征中存在了一些特征对于提高模型的准确率比其他更重要的特征,也还有一些特征与其他特征放在一起出现了冗余,特征选择是通过自动选出对于解决问题最有用的特征子集来解决上述问题的。特征选择算法可能会用到评分方法来排名和选择特征,比如相关性或其他确定特征重要性的方法,更进一步的方法可能需要通过试错,来搜索出特征子集。

    所以当数据预处理完成后,我们需要选择有意义的特征输入机器学习的算法和模型进行训练。通常来说,从两个方面考虑来选择特征:(1)特征是否发散:如果一个特征不发散,例如方差接近于0,也就是说样本在这个特征上基本上没有差异,这个特征对于样本的区分并没有什么用。(2)特征与目标的相关性:这点比较显见,与目标相关性高的特征,应当优选选择。除方差法外,本文介绍的其他方法均从相关性考虑。

    根据特征选择的形式又可以将特征选择方法分为3种:1)Filter:过滤法,按照发散性或者相关性对各个特征进行评分,设定阈值或者待选择阈值的个数,选择特征。2)Wrapper:包装法,根据目标函数(通常是预测效果评分),每次选择若干特征,或者排除若干特征。3)Embedded:嵌入法,先使用某些机器学习的算法和模型进行训练,得到各个特征的权值系数,根据系数从大到小选择特征。类似于Filter方法,但是是通过训练来确定特征的优劣。

    使用sklearn中的feature_selection库来进行特征选择。

    1)Filter:过滤法
    (1). 方差选择法:使用方差选择法,先要计算各个特征的方差,然后根据阈值,选择方差大于阈值的特征。
    1 # 使用feature_selection库的VarianceThreshold类来选择特征
    2 from sklearn.feature_selection import VarianceThreshold

    (2). 相关系数法:使用相关系数法,先要计算各个特征对目标值的相关系数以及相关系数的P值。皮尔森相关系数是一种最简单的,能帮助理解特征和响应变量之间关系的方法,该方法衡量的是变量之间的线性相关性,结果的取值区间为[-1,1],-1表示完全的负相关(这个变量下降,那个就会上升),+1表示完全的正相关,0表示没有线性相关。 距离相关系数是为了克服Pearson相关系数的弱点而生的。Pearson相关系数是0,我们也不能断定这两个变量是独立的(有可能是非线性相关);但如果距离相关系数是0,那么我们就可以说这两个变量是独立的。

    1 # 用feature_selection库的SelectKBest类结合相关系数来选择特征
    2 from sklearn.feature_selection import SelectKBest
    3 from scipy.stats import pearsonr

    (3). 卡方检验:经典的卡方检验是检验定性自变量对定性因变量的相关性。假设自变量有N种取值,因变量有M种取值,考虑自变量等于i且因变量等于j的样本频数的观察值与期望的差距,构建统计量:x^2 = sum [ (A - E)^2 / E ],这个统计量的含义就是自变量对因变量的相关性。选择卡方值排在前面的K个特征作为最终的特征选择。

    1 # 用feature_selection库的SelectKBest类结合卡方检验来选择特征
    2 from sklearn.feature_selection import SelectKBest
    3 from sklearn.feature_selection import chi2

    (4). 互信息法:经典的互信息也是评价定性自变量对定性因变量的相关性的,为了处理定量数据,最大信息系数法被提出,互信息计算公式如下:

    选择互信息排列靠前的特征作为最终的选取特征。想把互信息直接用于特征选择其实不是太方便:1、它不属于度量方式,也没有办法归一化,在不同数据及上的结果无法做比较;2、对于连续变量的计算不是很方便(X和Y都是集合,x,y都是离散的取值),通常变量需要先离散化,而互信息的结果对离散化的方式很敏感。

    1 # 使用feature_selection库的SelectKBest类结合最大信息系数法来选择特征
    2 from sklearn.feature_selection import SelectKBest
    3 from minepy import MINE

    2)Wrapper:包装法

    (1). 递归特征消除法:递归消除特征法使用一个基模型来进行多轮训练,每轮训练后,消除若干权值系数的特征,再基于新的特征集进行下一轮训练。

    1 # 使用feature_selection库的RFE类来选择特征
    2 from sklearn.feature_selection import RFE
    3 from sklearn.linear_model import LogisticRegression

    3)Embedded:嵌入法

    (1). 基于惩罚项的特征选择法:使用带惩罚项的基模型,除了筛选出特征外,同时也进行了降维。L1和L2正则常被用来解决过拟合问题。而L1正则也常被用来进行特征选择,主要原因在于L1正则化会使得较多的参数为0,从而产生稀疏解。我们可以将0对应的特征遗弃,进而用来选择特征。因此,训练的过程中,如果使用了L1范数作为惩罚项,可以起到特征筛选的效果。正则化模型:正则化就是把额外的约束或者惩罚项加到已有模型(损失函数)上,以防止过拟合并提高泛化能力。损失函数由原来的E(X,Y)变为E(X,Y)+alpha||w||,w是模型系数组成的向量(有些地方也叫参数parameter,coefficients),||·||一般是L1或者L2范数,alpha是一个可调的参数,控制着正则化的强度。当用在线性模型上时,L1正则化和L2正则化也称为(拉索回归)Lasso和(岭回归)Ridge。

     L1正则化/Lasso

    L1正则化将系数w的l1范数作为惩罚项加到损失函数上,由于正则项非零,这就迫使那些弱的特征所对应的系数变成0。因此L1正则化往往会使学到的模型很稀疏(系数w经常为0),这个特性使得L1正则化成为一种很好的特征选择方法。(缩减系数)

     L2正则化/Ridge regression

    L2正则化将系数向量的L2范数添加到了损失函数中。由于L2惩罚项中系数是二次方的,这使得L2和L1有着诸多差异,最明显的一点就是,L2正则化会让系数的取值变得平均(平滑系数)。对于关联特征,这意味着他们能够获得更相近的对应系数。还是以Y=X1+X2为例,假设X1和X2具有很强的关联,如果用L1正则化,不论学到的模型是Y=X1+X2还是Y=2X1,惩罚都是一样的,都是2alpha。但是对于L2来说,第一个模型的惩罚项是2alpha,但第二个模型的是4*alpha。可以看出,系数之和为常数时,各系数相等时惩罚是最小的,所以才有了L2会让各个系数趋于相同的特点。可以看出,L2正则化对于特征选择来说一种稳定的模型,不像L1正则化那样,系数会因为细微的数据变化而波动。所以L2正则化和L1正则化提供的价值是不同的,L2正则化对于特征理解来说更加有用:表示能力强的特征对应的系数是非零。

    1 # Model类结合带L1以及L2惩罚项的逻辑回归模型,来选择特征
    2 from sklearn.feature_selection import SelectFromModel
    3 from sklearn.linear_model import LogisticRegression

    【注意】拉索回归和岭回归在应用中都不会单独去用的 都太绝对了,所以引出弹性网,综和了拉索回归和岭回归  L1和L2的功能。

    (2). 基于树模型的特征选择法:训练能够对特征打分的预选模型:GBDT、RandomForest和Logistic Regression等都能对模型的特征打分,通过打分获得相关性后再训练最终模型;比如树模型中GBDT用来作为基模型进行特征选择。

    1 # 使用feature_selection库的SelectFromModel类结合GBDT模型来选择特征
    2 from sklearn.feature_selection import SelectFromModel
    3 from sklearn.ensemble import GradientBoostingClassifier

    3. 降维:当特征选择完成后,可以直接训练模型了,但是可能由于特征矩阵过大,导致计算量大,训练时间长的问题,因此降低特征矩阵维度也是必不可少的。常见的降维方法除了以上提到的基于L1惩罚项的模型以外,另外还有主成分分析法(PCA)和线性判别分析(LDA),线性判别分析本身也是一个分类模型。PCA和LDA有很多的相似点,其本质是要将原始的样本映射到维度更低的样本空间中,但是PCA和LDA的映射目标不一样:PCA是为了让映射后的样本具有最大的发散性;而LDA是为了让映射后的样本有最好的分类性能。所以说PCA是一种无监督的降维方法,而LDA是一种有监督的降维方法。

    (1). 主成分分析法(PCA):
    1 # 使用decomposition库的PCA类选择特征
    2 from sklearn.decomposition import PCA
    (2).  线性判别分析法(LDA)
    1 # 使用lda库的LDA类选择特征
    2 from sklearn.lda import LDA

    4. 特征提取:特征提取涉及到从原始属性中自动生成一些新的特征集的一系列算法,降维算法就属于这一类。特征提取是一个自动将观测值降维到一个足够建模的小数据集的过程。对于列表数据,可使用的方法包括一些投影方法,像主成分分析和无监督聚类算法。对于图形数据,可能包括一些直线检测和边缘检测,对于不同领域有各自的方法。特征提取的关键点在于这些方法是自动的(虽然可能需要从简单方法中设计和构建得到),还能够解决不受控制的高维数据的问题。大部分的情况下,是将这些不同类型数据(如图,语言,视频等)存成数字格式来进行模拟观察。

    1 # 1.字典特征提取
    2 from sklearn.feature_extraction import DictVectorizer
    3 # 2.文本特征提取
    4 from sklearn.feature_extraction.text import CountVectorizer 
    5 # 3.词频特征提取
    6 from sklearn.feature_extraction.text import TfidfVectorizer

    机器学习建模与调优

    、评估与报告

    流程总回顾:数据挖掘分析通常包括数据采集,数据分析,特征工程,训练模型,模型评估等步骤。使用sklearn工具可以方便地进行特征工程和模型训练工作。

     

    参考文章:

    1. https://zhuanlan.zhihu.com/p/20571505

    2. https://www.cnblogs.com/bonelee/p/8632866.html

    3.https://www.cnblogs.com/jasonfreak/p/5448462.html

  • 相关阅读:
    Python3 循环语句
    Python3 条件控制
    Python3 字典
    Python3 元组
    Python的字符串函数
    2019/10/24
    JS-字符串方法总结
    maven环境变量配置
    PowerDesigner逆向导入MYSQL数据库并显示中文注释(转载)
    web_custom_request函数详解(转载)
  • 原文地址:https://www.cnblogs.com/bonheur/p/12457855.html
Copyright © 2011-2022 走看看