机器学习day02

分类算法

目标值:类别

一、转换器——特征工程的父类

想一下之前做的特征工程的步骤?

  • 1、实例化 (实例化的是一个转换器类(Transformer))
  • 2、调用fit_transform(对于文档建立分类词频矩阵,不能同时调用)

我们把特征工程的接口称之为转换器,其中转换器调用有这么几种形式

  • fit_transform (以标准化为例:(x- mean )/std )
  • fit 计算每一列的平均值 mean、标准差 std
  • transform (x-mean)/std进行最终的转换

二、估计器(sklearn机器学习算法的实现)

1、在sklearn中,估计器(estimator)是一个重要的角色,是一类实现了算法的API

  • 1、用于分类的估计器:
    • sklearn.neighbors k-近邻算法
    • sklearn.naive_bayes 贝叶斯
    • sklearn.linear_model.LogisticRegression 逻辑回归
    • sklearn.tree 决策树与随机森林
  • 2、用于回归的估计器:
    • sklearn.linear_model.LinearRegression 线性回归
    • sklearn.linear_model.Ridge 岭回归
  • 3、用于无监督学习的估计器
    • sklearn.cluster.KMeans 聚类

2、工作流程

将训练集的特征值(x_train)与目标值(y_train)传入估计器(estimator),通过estimator.fit其内部会生成一个模型?

image-20240324205405154
  • 例化一个estimator

  • estimator.fit(x_train,y_train)计算

    • x:特征值 y:目标值

    • 调用完毕,模型生成

  • 模型评估:

    1. 直接比对真实值和预测值

      • y_predict =estimator.predict(x_test)

      • y_test ==y_predict

        将测试集的特征值(x_test)传入预估器,生成预测的目标值(y_predict),再将预测的目标值与实际的目标值(y_test)对比

    2. 计算准确率

      • accuracy=estimator.score(x_test,y_test)

三、K-近邻算法(KNN)

根据你的“邻居”来推断出你的类别

1. 原理
  • 定义:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。

来源:KNN算法最早是由Cover和Hart提出的一种分类算法

k 值取得过小时,容易受到异常点的影响;k 值取得过大时,容易受到样本不均衡的影响

2. 距离公式

如何确定谁是“邻居”?计算距离

两个样本的距离可以通过如下公式计算,又叫欧式距离

image-20240324210641148

曼哈顿距离:绝对值距离

明可夫斯基距离

3. K-近邻算法API

sklearn.neighbors.KNeighborsClassifier(n_neighbors=5,algorithm=‘auto’)

  • n_neighbors:int,可选(默认= 5),k_neighbors查询默认使用的邻居数
  • algorithm:{‘auto’,‘ball_tree’,‘kd_tree’,‘brute’},可选用于计算最近邻居的算法:‘ball_tree’将会使用 BallTree,‘kd_tree’将使用 KDTree。‘auto’将尝试根据传递给fit方法的值来决定最合适的算法。 (不同实现方式影响效率)
4. 案例一:鸢尾花种类预测
image-20240324211800193

流程:

  • 获取数据
  • 数据集划分(训练集、测试集)
  • 特征工程——标准化
  • KNN预估器流程
  • 模型评估
5. 总结
  • 优点:简单,易于理解,易于实现,无需训练
  • 缺点:
    • 懒情算法,对测试样本分类时的计算量大,内存开销大
    • 必须指定K值,K值选择不当则分类精度不能保证
  • 使用场景:小数据场景,几千~几万样本,具体场景具体业务去测试

四、模型选择与调优

1. 为什么要交叉验证

交叉验证目的:为了让被评估的模型更加准确可信

2. 什么是交叉验证(cross validation)

交叉验证:将拿到的训练数据,分为训练和验证集。以下图为例:将数据分成4份,其中一份作为验证集。然后经过4次(组)的测试,每次都更换不同的验证集。即得到4组模型的结果,取平均值作为最终结果。又称4折交叉验证。

3. 分析

我们之前知道数据分为训练集和测试集,但是为了让从训练得到模型结果更加准确。做以下处理:

  • 训练集:训练集+验证集
  • 测试集:测试集
image-20240325104658257

问题:那么这个只是对于参数得出更好的结果,那么怎么选择或者调优参数呢?

4. 超参数搜索-网格搜索(Grid Search)

通常情况下,有很多参数是需要手动指定的(如k-近邻算法中的K值),这种叫超参数。但是手动过程繁杂,所以需要对模型预设几种超参数组合。每组超参数都采用交叉验证来进行评估。最后选出最优参数组合建立模型。

5. 模型选择与调优API
  • sklearn.model_selection.GridSearchCV(estimator, param_grid=None,cv=None)
    • 对估计器的指定参数值进行详尽搜索
    • estimator:估计器对象
    • param_grid:估计器参数(dict){“n_neighbors”:[1,3,5]}
    • cv:指定几折交叉验证
    • fit():输入训练数据
    • score():准确率
    • 结果分析:
      • 最佳参数:best_params_
      • 最佳结果:best_score_
      • 最佳估计器:best_estimator_
      • 交叉验证结果:cv_results_
6. Facebook签到位置预测K值调优

五、朴素贝叶斯算法

1. 概率基础
  • 概率(Probability)定义
    • 概率定义为一件事情发生的可能性
      • 扔出一个硬币,结果头像朝上
      • 某天是晴天
    • P(X) : 取值在[0, 1]
2. 联合概率、条件概率与相关独立
  • 联合概率:包含多个条件,且所有条件同时成立的概率
    • 记作:P(A,B)
    • 特性:P(程序员,匀称)
  • 条件概率:就是事件A在另外一个事件B已经发生条件下的发生概率
    • 记作:P(A|B)
    • 特性:P(程序员|喜欢)
  • 相互独立:如果P(A,B)=P(A)P(B),则称事件A与事件B相互独立。
3. 朴素贝叶斯

贝叶斯公式:image-20240325152428601

朴素贝叶斯:简单理解,就是假定了特征与特征之间相互独立的贝叶斯公式。

也就是说,朴素贝叶斯,之所以朴素,就在于假定了特征与特征相互独立。

应用场景:文本分类(以单词作为特征)

image-20240325152904089

公式分为三个部分:

  • P©:每个文档类别的概率(某文档类别数/总文档数量)
  • P(W│C):给定类别下特征(被预测文档中出现的词)的概率
    • 计算方法:P(F1│C)=Ni/N (训练文档中去计算)
      • Ni为该F1词在C类别所有文档中出现的次数
      • N为所属类别C下的文档所有词出现的次数和
  • P(F1,F2,…) 预测文档中每个词的概率

如果计算两个类别概率比较:

image-20240325153803004

所以我们只要比较前面的大小就可以,得出谁的概率大

如果我们计算出来的某个概率为0时,是不合理的。

4. 拉普拉斯平滑系数

目的:防止计算出的分类概率为0

image-20240325153929168
5. API
  • sklearn.naive_bayes.MultinomialNB(alpha = 1.0)
    • 朴素贝叶斯分类
    • alpha:拉普拉斯平滑系数

6.总结:

  • 优点
    • 朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率。
    • 对缺失数据不太敏感,算法也比较简单,常用于文本分类。
    • 分类准确度高,速度快
  • 缺点
    • 于使用了样本属性独立性(假定了特征与特征之间相互独立)的假设,所以如果特征属性有关联时其效果不好

六、决策树

决策树思想的来源非常朴素,程序设计中的条件分支结构就是if-then结构,最早的决策树就是利用这类结构分割数据的一种分类学习方法

image-20240325200346333

如何高效的进行决策?(找到最高效的决策顺序)特征的先后顺序

1. 信息论基础
  • 信息:消除随机不定性的东西

    • 小明 年龄 “我今年18岁” —— 信息
    • 小华 ”小明明年19岁” —— 不是信息
  • 信息熵:H的专业术语称之为信息熵,单位为比特。image-20240327100420540

  • 决策树的划分依据之一------信息增益

    • 信息增益 = 信息熵 — 条件熵
image-20240327100513171
2. 决策树的三种算法实现

当然决策树的原理不止信息增益这一种,还有其他方法。但是原理都类似,我们就不去举例计算。

  • ID3
    • 信息增益 最大的准则
  • C4.5
    • 信息增益比 最大的准则
  • CART
    • 分类树: 基尼系数 最小的准则 在sklearn中可以选择划分的默认原则
    • 优势:划分更加细致(从后面例子的树显示来理解)
3. 决策树API
  • class sklearn.tree.DecisionTreeClassifier(criterion=’gini’, max_depth=None,random_state=None)
    • 决策树分类器
    • criterion:默认是’gini’系数,也可以选择信息增益的熵’entropy’
    • max_depth:树的深度大小
    • random_state:随机数种子
  • 其中会有些超参数:max_depth:树的深度大小
    • 其它超参数我们会结合随机森林讲解
4. 决策树可视化
  • 保存树的结构到dot文件

    • sklearn.tree.export_graphviz() 该函数能够导出DOT格式
      • ree.export_graphviz(estimator,out_file='tree.dot’,feature_names=[‘’,’’])
  • [Graphviz Online (dreampuf.github.io)](https://dreampuf.github.io/GraphvizOnline

5. 总结
  • 优点:
    • 简单的理解和解释,树木可视化。(可视化,可解释能力强)
  • 缺点:
    • 决策树学习者可以创建不能很好地推广数据的过于复杂的树,这被称为过拟合。
  • 改进:
    • 减枝cart算法(决策树API当中已经实现,随机森林参数调优有相关介绍)
    • 随机森林

注:企业重要决策,由于决策树很好的分析能力,在决策过程应用较多, 可以选择特征

七、集成学习方法之随机森林

集成学习通过建立几个模型组合的来解决单一预测问题。它的工作原理是生成多个分类器/模型,各自独立地学习和作出预测。这些预测最后结合成组合预测,因此优于任何一个单分类的做出预测。

在机器学习中,随机森林是一个包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数而定。

例如, 如果你训练了5个树, 其中有4个树的结果是True, 1个数的结果是False, 那么最终投票结果就是True

1. 随机森林原理过程

训练集:特征值 + 目标值

随机:训练集随机、特征随机

学习算法根据下列算法而建造每棵树:

  • 用N来表示训练用例(样本)的个数,M表示特征数目。
    • 1、一次随机选出一个样本,重复N次, (有可能出现重复的样本)(随机有放回)
    • 2、随机去选出m个特征, m <<M,建立决策树
  • 采取bootstrap抽样
2. 为什么采用BootStrap抽样
  • 为什么要随机抽样训练集?
    • 如果不进行随机抽样,每棵树的训练集都一样,那么最终训练出的树分类结果也是完全一样的
  • 为什么要有放回地抽样?
    • 如果不是有放回的抽样,那么每棵树的训练样本都是不同的,都是没有交集的,这样每棵树都是“有偏的”,都是绝对“片面的”(当然这样说可能不对),也就是说每棵树训练出来都是有很大的差异的;而随机森林最后分类取决于多棵树(弱分类器)的投票表决。
3. API
  • class sklearn.ensemble.RandomForestClassifier(n_estimators=10, criterion=’gini’, max_depth=None, bootstrap=True, random_state=None, min_samples_split=2)

    • 随机森林分类器
    • n_estimators:integer,optional(default = 10)森林里的树木数量120,200,300,500,800,1200
    • criteria:string,可选(default =“gini”)分割特征的测量方法
    • max_depth:integer或None,可选(默认=无)树的最大深度 5,8,15,25,30
    • max_features="auto”,每个决策树的最大特征数量
      • If “auto”, then max_features=sqrt(n_features).
      • If “sqrt”, then max_features=sqrt(n_features) (same as “auto”).
      • If “log2”, then max_features=log2(n_features).
      • If None, then max_features=n_features.
    • bootstrap:boolean,optional(default = True)是否在构建树时使用放回抽样
    • min_samples_split:节点划分最少样本数
    • min_samples_leaf:叶子节点的最小样本数
  • 超参数:n_estimator, max_depth, min_samples_split,min_samples_leaf

注意

  • 随机森林的建立过程
  • 树的深度、树的个数等需要进行超参数调优
4. 总结
  • 在当前所有算法中,具有极好的准确率
  • 能够有效地运行在大数据集上,处理具有高维特征的输入样本,而且不需要降维
  • 能够评估各个特征在分类问题上的重要性
  • 18
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值