20210901——机器学习复习

人工智能概述

机器学习与人工智能/深度学习

1956年8月 达特茅斯会议——人工智能的起点

机器学习是人工智能的一个实现途径

深度学习是机器学习的一个方法发展而来

机器学习/深度学习能做什么

应用场景非常多,可以渗透到了各个行业领域当中,医疗,航空,教育,物流,电商等等领域。

传统预测:店铺销量预测/量化投资/广告推荐

图像领域:人脸识别/交通

自然语言:文本分类/情感分析/聊天机器人

什么是机器学习

定义

个人认为:机器学习是从已知数据中自动分析获得模型,并且利用模型对未知数据进行预测。

科学定义:1) 任务T;2) 训练过程E;3) 模型表现P。而学习过程则可以被拆解为「为了实现任务T」,我们「通过训练过程E」,逐步「提高表现P」的一个过程。

解释

我们人类从大量的日常经验中归纳规律,当面临新的问题的时候,就可以利用以往总结的规律去分析现实状况,采取最佳策略。

从大量的猫和狗的图片中自动分析获得模型(辨别猫和狗的规律),从而使机器拥有识别猫和狗的能力。

从房屋的各种信息中自动分析或得模型,判断房屋的价格,从而使机器拥有预测房屋价格的能力。

机器学习算法分类

监督学习

目标值:类别 - 分类问题 离散型

目标值:连续型的数据 - 回归问题 连续型

无监督学习

1.目标值:无 - 聚类问题

监督学习

定义:输入数据是由特征值和目标值所组成。函数的输出可以是一个连续的值(回归),或者输出是有限个离散值(分类)。

分类:k-邻近,贝叶斯,决策树与随机森林,逻辑回归

回归:线性回归,岭回归

无监督学习

定义:输入数据是由输入特征值所组成

聚类:k-means

机器学习开发流程

获取数据

数据处理 有缺失值/异常值,不符合要求

特征工程 处理成更可以为机器学习使用数据

选择机器学习算法训练,得到模型

模型评估

应用上线

学习框架和资料介绍

算法是核心,数据与计算是基础

算法大部分的核心复杂的算法设计都是算法工程师在做,而我们

分析更多的数据

分析具体业务

应用常见的算法

特征工程,调参,优化

本科学的线性代数,高等数学 李航-统计学习方法 周志华-西瓜书(机器学习)花书(深度学习)

常见框架

环境配置与开发工具

Anaconda指的是一个开源的Python发行版本,其包含了conda、Python等180多个科学包及其依赖项。因为包含了大量的科学包,Anaconda 的下载文件比较大(约 531 MB),如果只需要某些包,或者需要节省带宽或存储空间,也可以使用Miniconda这个较小的发行版(仅包含conda和 Python)。

Pycharm编译器/Jupyter

数据集

获取数据集

公司内部

数据接口 花钱

学习阶段sklearn/kaggle竞赛/UCI加州大学

Sklearn数据集

特征值 + 目标值 = 数据集

加载数据集

slearn.datasets
load_() 获取比较小的数据集
fetch_
() 获取大规模数据集,需要从网络上下载

得到鸢尾花数据集

返回值介绍

data:特征数据数组,二维数组,numpy.ndarray数组

target: 标签数组,结果集

DESCR:数据描述

feature_names:特征名

target_names:标签名

数据集的划分

拿到的数据不能全部用于训练,我们需要一部分用于训练,构建模式,另一部分进行测试,评估模型是否有效。

一般是训练集75%

sklearn.model_selection.train_test_split(arrays, *options)
x数据集的特征值
y数据集的标签值
test_size测试集的大小,一般为float,默认为75%
random_state随机数种子,不同的种子会造成不同的随机采样结果,相同的种子采样结果相同
return 训练集特征值,测试集特征值,训练集目标值,测试集目标值

特征工程

数据和特征决定了机器学习的上限,而模型算法只是无限逼近这个上限而已

特征工程定义

特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程。

pandas 数据清洗/数据处理 不属于特征工程

sklearn 特征工程(特征抽取 特征预处理 特征降维)

特征提取

将任意数据(如文本或者图像)转换为可用于机器学习的数字特征

文本类型 -> 数值类型 比如一篇文章

类型 -> 数值类型 比如男女

字典特征提取

sklearn.feature_extraction.DictVectorizer(Sparse=True,…)
返回一个转换器
transfer.fit_transform()返回sparse矩阵

应用

稀疏矩阵将非零值,按照位置表示出来,这样可以节省内存,提高加载效率。

one-hot编码

文本特征提取

对一篇文章进行分类,我们可以选择单词,句子,短语,字母作为特征,一般选择单词

方法一:CountVectorizer

与DictVectorizer一样,实例化一个转换器,然后利用转换器处理数据。

中文文本特征抽取

方法二:Tf-idf Vectorizer

tf-idf的主要思想:如果某个词或者短语在一片文章中出现的概率高,并且在其他文章中很少出现,则认为该词语或者短语具有很好的类别区分能力,适合用来分类

主要作用:用于评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度

公式

词频(term frequency,tf):指的是某一个给定的词语在该文件中出现的频率

逆向文档频率(inverse document frequency,idf):是一个词语普遍重要性的度量。某一个特定词语的idf,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取以10为底的对数得到。

举例

两个词:“经济”,“非常”

现在有1000篇文章存在语料库中

100篇文章 - “非常”

10篇文章 - “经济”

两篇文章

文章a(100词): 10次“经济” tf: 10/100 = 0.1 idf:1000/10 = 100 再取 = 2 tf-idf: 0.2

文章b(100词): 10次“非常” tf: 10/100 = 0.1 idf:1000/100 =10 在取 = 1 tf-idf: 0.1

应用

特征预处理

通过一些转换函数,将特征数据转换成更加适合算法模型的特征数据过程。

数值型数据的无量纲化 :归一化与标准化

约会对象数据

特征的单位或者大小相差较大,或者某特征的方差相比其他的特征要大出几个数量级,容易影响(支配)目标结果,使得一些算法无法学习到其他的特征。

归一化

通过对原始数据进行变换把数据映射到默认为[0,1]之间

公式

作用于每一个列,max为一列的最大值,min为一列的最小值,那么X"为最终结果,mx,mi默认为1和0。

应用

但是有异常值(最大值,最小值),由于归一化就是根据最大值与最小值进行计算的,一旦有误就会影响结果。

所以这种归一化的方法,只适合传统精确小数据集场景。

标准化

通过对原始数据进行变化把数据变换到均值为0,标准差为1范围内公式

其中mean为平均值, std为标准差

标准差:集中程度

对于归一化:如果出现异常点,影响了最大值和最小值,那么结果显然会发生改变

对于标准化:如果出现异常点,由于具有一定数据量,少量的一场点对于平均值的影响并不大,从而方差改变较小。

应用

适用于现代比较庞大的数据场景

特征降维

降维 - 降低维度

降维是指在某些限定条件下,降低随机变量(特征)的个数,得到一组“不相关“主变量的过程”

效果:特征与特征之间不相关,因为我们在进行训练的时候,都是使用特征来进行学习,如果特征本身存在问题或者特征之间相关性比较强,对于算法学习预测会影响比较大。

降维的两种方式

特征选择

主成分分析PCA

特征选择

定义:数据中包含冗余或者相关变量(或称之为特征/属性/指标等等),目的在于从原有特征中找出主要特征。

Filter过滤式:主要探究特征本身特点,特征与特征和目标值之间关联

方差选择法(低方差特征过滤)

相关系数(衡量特征与特征之间的相关程度)

Embedded嵌入式:算法自动选择特征

决策树

正则化

深度学习中的卷积

方差选择法

删除低方差的一些特征,前面讲过方差的意义。再结合方差的大小来考虑这个方式的角度。

特征方差小:某个特征大多样本的值比较相近

特征方差大:某个特征很多样本的值都有差别

sklearn.featurre_selection.VarianceThreshold(threshold)
输入:numpy array格式的数据
返回值:训练集差异低于threshold的特征将被删除。默认值是保留所有非零方差特征。

没有设置方差值

设置参数为5

相关系数

皮尔逊相关系数:反映变量之间相关关系密切程度的统计指标

公式:

相关系数最后的值r,会介于-1与1之间

当r>0时,表示两变量正相关,r<0,两变量为负相关

当|r|=1时,表示两变量为完全相关,r=0时,表示两变量间无相关关系

当0<|r|<1,表示两变量存在一定程度的相关,越接近1,两个变量间线性关系越密切,越接近0,两个变量的线性关系越弱

一般可以按照三级进行划分,|r|<0.4为低度相关,0.4<|r|<0.7为显著相关,0.7

当特征与特征之间相关性非常高,那么我们怎么去进行选择

选其中一个

加权求和

主成分分析

PCA主成分分析

定义:高维数据转化为低维数据的过程,在此过程中可能会舍弃原有数据,创造新的变量

作用:是数据维数压缩,尽可能降低原数据的维数(复杂度),损失少量信息

应用:回归分析或者聚类分析当中

主要思想:PCA的主要思想是将n维特征映射到k维上,这k维是全新的正交特征也被称为主成分,是在原有n维特征的基础上重新构造出来的k维特征。PCA的工作就是从原始的空间中顺序地找一组相互正交的坐标轴,新的坐标轴的选择与数据本身是密切相关的。

步骤:其中,第一个新坐标轴选择是原始数据中方差最大的方向,第二个新坐标轴选取是与第一个坐标轴正交的平面中使得方差最大的,第三个轴是与第1,2个轴正交的平面中方差最大的。依次类推,可以得到n个这样的坐标轴。通过这种方式获得的新的坐标轴,我们发现,大部分方差都包含在前面k个坐标轴中,后面的坐标轴所含的方差几乎为0。于是,我们可以忽略余下的坐标轴,只保留前面k个含有绝大部分方差的坐标轴。事实上,这相当于只保留包含绝大部分方差的维度特征,而忽略包含方差几乎为0的特征维度,实现对数据特征的降维处理。

sklearn.decomposition.PCA(n_components=None)
n_components 小数:表示保留百分之多信息 整数:减少到多少特征

应用

案例:探究用户对物品类别的喜好细分降维

kaggle上的一个案例

找到用户 - 物品类型的关系

order_products_prior.csv:订单与商品信息

字段:order_id,product_id,add_to_cart_order,reordered

products.csv:商品信息

字段: product_id,product_name,aisle_id,department_id

orders.csv:用户的订单信息

字段:order_id,user_id,eval_set,order_number

aisles.csv:商品所属具体物品类别

字段:aisle_id,aisle

需要将user_id和aisle放在同一个表中-合并

找到user_id和aisle 交叉表和透视表

特征冗余过多,利用pca降维

分类算法

目标值:类别

K-近邻算法

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

原理

K Nearest Neighbor 算法又叫KNN算法

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

根据计算距离(欧式距离),来确定谁是邻居。

电影类型分析

K值取得过大,样本不均衡的影响

K值取得过小,容易收到异常点的影响

使用

sklearn.neighbors.KNeighborsClassifier(n_neighbors=5,algorithm=‘auto’)
n_neighbors:默认为5
algorithm:计算最近邻居的算法

鸢尾花数据集

获取数据-数据集划分-特征工程(标准化)-算法训练模型(knn)-评估模型

总结

优点:简单,易于理解,易于实现

缺点:必须指定k值,k值选择不当则分类精度不能保证

模型选择与调优

交叉验证

将拿到的训练数据,再次分为训练和验证集。

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

目的就是为了让为了让评估的模型更加的准确

超参数搜索-网格搜索

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

sklearn.model_selection.GridSearchCV(estimator,param_gird=,cv=)
estimator:预估器对象
param_grid:估计器参数n_neighbors:[1,3,5]
cv:指定几折交叉验证

预测facebook签到位置

目的是预测一个人签到到哪个地方,对于本次比赛的目的,facebook创建一个人造的世界,包括位于10公里的10平方公里超过10万米的地方。对于一个给定的坐标,你的任务是返回最有可能的地方的排名列表。数据制作出类似于来自移动设备的位置的信号,给你需要什么与不准确的。嘈杂的价值观复杂的真实数据工作一番风味。不一致的和错误的位置数据可能破坏。

File description

row_id: id

x,y: 坐标

accuracy:精准度

time:时间戳

place_id:业务的id,预测目标

应用

下方是给出的数据集

获取数据-数据处理(没有清洗好特征值,目标值)-数据集划分-特征工程标准化-knn算法预估结果-模型选择与调优-模型评估

朴素贝叶斯算法

概率回顾

联合概率:包含多个条件,且所有条件同时成立的概率

记作:P(A,B)

条件概率:就是事件A在另外一个事件B已经发生条件下的发生概率

记作:P(A|B)

相互独立:如果P(A,B) = P(A)P(B),则称事件A与事件B相互独立

贝叶斯公式

推导

p(喜欢|产品,超重) 分子: p(产品,超重|喜欢) * p(喜欢) 分母:p(产品,超重)

p(喜欢) = 4/7

p(产品,超重) = ? 不存在 p(产品) * p(超重) = 2/7 * 3/7 = 6/49

p(产品,超重|喜欢) = p(产品|喜欢) * p(超重|喜欢) = 1/2 * 1/4 = 1/8

p(喜欢|产品,超重)

朴素:假设:特征与特征之间是独立的

1/8 * 4/7 / 6/49 = 7/12

总结

优点:

朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率

对缺失数据不太敏感,算法也比较简单,常用于文本分类

分类准确度高,速度快

缺点:

由于使用了样本属性独立性的假设,所以如果特征属性有关联的时候会有影响。

决策树

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

决策树:如何高效的进行决策?特征执行的先后顺序

决策树原理

银行贷款数据 已知4个特征,预测是否要贷款给某个人

信息论基础

信息:

香农:消除随机不定性的东西

信息的衡量 - 信息量 - 信息熵

信息熵公式

信息增益:特征A对训练数据集D的信息增益g(D,A),定义为集合D的信息熵H(D)与特征A给定条件下D的信息条件熵H(D|A)之差,公式为

信息增益公式

条件熵公式

H(D) = -(6/15long(6/15) +

g(D,年龄) = H(D) - H(D|年龄) = 0.971 - 1/3H(中年)- 1/3H(青年)- 1/3H(老年)

我们就可以根据得到的信息增益大小来判断特征划分的顺序。

g(D,A1) = 0.313 g(D,A2) = 0.324 g(D,A3) = 0.420 g(D,A4) = 0.363

决策树的API

sklearn.tree.DescisionTreeClassifier(criterion=,max_depth=,random_state=)
criterion默认是‘gini’系统,也可以选择信息增益的熵’entropy’
max_depth树的深度
random_state:随机数种子

可视化

sklearn.tree.export_graphviz(estimator,out_file=,)

可视化网站:http://webgraphviz.com/

案例使用:泰坦尼克号生存

数据集:特征是票的类别,是否存活,乘坐班(社会经济阶层代表) ,年龄(age数据存在缺失),登陆,home.dest,房间,票,船和性别

流程:获取数据集-数据清洗(缺失值处理,特征值转换成字典类型)-划分数据集-特征工程-决策树算法-模型评估

集成学习方法之随机森林

集成学习方法

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

随机森林

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

随机森林原理

训练集随机:bootstrap,随机有放回抽样

特征随机:从M个特种中随机抽取m个特征, M >> m

应用

总结

在当前所有算法中,具有极好的准确率

处理具有高维特征的输入样本,而且不需要降维

回归与聚类算法

线性回归

目标值=连续型的数据

经典的应用场景:房价预测,销售额度预测,金融:贷款额度预测,利用先行回归以及系数分析因子。

定义与公式

线性回归(Linear regression)是利用回归方程(函数)对一个或者多个自变量(特征值)和因变量(目标值)之间关系进行建模的一种分析方式。

公式:

特点:只有一个自变量的情况称为单变量回归,多于一个自变量情况的叫做多元回归。

例子:

期末成绩 = 0.7考试成绩 + 0.3平时成绩

房子价格 = 0.02距离中心区域的距离 + 0.04城市科技成都 + 0.254*小区保安率

线性回归的损失和优化原理

目标:求模型参数,使得模型参数能够使得预测准确

损失函数

yi为第i个训练样本的真实值

f(xi,wi)为第i个训练样本特征值组合预测函数

损失函数又称为最小二乘法

如何减少这个损失,使我们的预测的更加准确些?既然存在了这个损失,我们一直说机器学习有自动学习的功能,在线性回归这里更是能够体现,这里可以通过一些优化方法取优化(实际上是数学当中求导的功能)回归的总损失!

优化算法

如何去求模型当中的W,使得损失最小?让模型达到最优?

线性回归经常使用的两种优化算法

正规方程: 直接求解,但是当特征过多复杂时,求解速度太慢并且得不到结果。

梯度下降:

α为学习速率,手动指定参数,α旁边的整体表示方向沿着这个函数下降的方向找,最后就能找到山谷的最低点,然后更新W值

模拟梯度下降

线性回归API

通过正规方程
sklearn.linear_model.LinearRegression(fit_intercept=True)

通过梯度下降
sklearn.linear_model.SGDRegressor(loss=,fit_intercept=,learning_rate=,eta0=)
loss="squared_loss"普通最小二乘法
learning_rate constant:eta=eta0 optimal:eta=1/(alpha*(t+t0) invscalling:eta=eta0/pow(t,power_t)

波士顿房价预测

506个样本,13个特征 1个目标值

利用正规方程求解

利用梯度下降

回归性能评估

均方误差(Mean Squared Error) MSE 评价机制

梯度下降的均方误差

正规方程的均方误差

欠拟合与过拟合

问题:训练数据训练的很好,误差也不大,为什么在测试集上面有问题呢?

可能是出现了过拟合想象

欠拟合:

因为机器学习到的天鹅特征太少了,导致区分标准太粗糙,不能准确识别出天鹅

过拟合:

机器已经基本能区别天鹅和其他动物了,然后,很不巧已有的天鹅图片全是白色天鹅的,于是机器学习过后,会认为天鹅的羽毛都是白色的,以后看到羽毛为黑的天鹅直接会认为不是天鹅。

定义

过拟合:一个假设在训练数据上能够获得比其他假设更好的拟合,但是在测试数据集上却不能很好的拟合数据,此时认为这个假设出现了过拟合的现象。(模型过于复杂)

欠拟合:一个假设在训练数据上不能获得更好的拟合,并且在测试数据集上也不能很好地拟合数据,此时认为这个假设出现了欠拟合的现象。(模型过于简单)

解决方案

欠拟合原因以及解决方法

原因:学习到数据的特征过少

解决办法:增加数据的特征量

过拟合原因以及解决方法

原因:原始特征过多,存在一些嘈杂特征,模型过于复杂是因为模型尝试去兼顾各个测试数据点

解决办法:正则化

正则化

L2正则化

作用:可以使得其中一些的W的都很小,都接近于0,削弱某个特征的影响

优点:越小的参数说明模型越简单,越简单的模型则越不容易产生过拟合现象

Ridge回归

加上L2正则化后的损失函数

L1正则化

作用:可以使得其中一些W的值直接为0,删除这个特征的影响

LASSO回归

逻辑回归与二分法

逻辑回归(Logistic Regress)是机器学习中的一种分类模型,逻辑回归是一种分类算法,虽然名字中都带有回归,但是它与回归之间有一定的联系。由于算法的简单和高效,在实际中应用非常广泛。

应用场景:

广告点击率

是否为垃圾邮件

是否患病

金融诈骗

虚拟账号

看到上面的例子,我们发现其中特点,那就是都属于两个类别之间的判断。逻辑回归就是解决二分类问题的利器。

逻辑回归原理

输入:

线性回归的输出就是逻辑回归的输入

激活函数公式:

输出的结果位于[0,1]区间中的一个概率值,默认为0.5为阈值。

假设我们有两个类别A,B,并且假设我们的概率值为属于A(1)这个类型的概率值,现在有一个样本的输入到逻辑回归输出结果是0.6,那么这个概率值超过0.5,意味着我们训练或者预测的结果就是A(1)类别,那么反之,如果结果为0。3,训练或者预测结果就B(0)类别。

最终模型:1/(1 + e^(-(w1x1 + w2x2 + w3x3 + …… + wnxn + b)))

我们之前的线性回归预测结果我们用均方误差进行衡量,那么对于逻辑回归,我们预测的结果该怎么去衡量该损失呢?

损失以及优化

对数似然损失

综合完整损失函数:

举例计算

优化: 同样地使用梯度下降优化算法,去减少损失函数的值,这样去更新逻辑回归前面对应算法的权重参数,提升原本属于1类别的概率,降低原本是0类别的概率。

逻辑回归案例:癌症分类预测良性与恶性乳腺肿瘤预测(UCI数据集)

sklearn.linear_model.LogisticRegression(solver=“liblinear”,penalty=“l2”,C=1.0)
solver:优化求解方式,默认是liblinear,使用坐标轴下降法来迭代 sag事根据数据集自动选择,随机平均提梯度下降
penalty:正则化的种类
C:正则化力度

数据集网址:https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data

真的患癌症的,能能够被检查出来的概率

精确率和召回率

在分类任务下,预测结果(Predicted Condition)与正确标记(True Condition)之间存在四种不同的组合,构成混淆矩阵(适用于多分类)

精确率:预测结果为正例样本中真实为正例的比例

召回率:真实位正例的样本中预测结果为正例的比例,查的全不全

F1-score,反映了模型的稳健型

分类评估报告API

sklearn.metrics.classification_report(y_true,y_pred,labels=[],target_names=None)
y_true:真实的目标值
y_pred:估计器预测目标值
labels:指定类别对应的数字
target_names:目标值类别名称
return:每个类别精确率和召回率

模型保存和加载

在jupyter或者是pycharm上,程序运行结束,也就结束了,没有把模型保存下来。

线性回归的模型保存加载案例

模型保存和加载的api

sklearn.externals import joblib
保存:joblib.dump(rf,“test.pkl”)
加载:estimator = joblib.load(“test.pkl”)

joblib.dump(estimator,“boston.pkl”)

无监督学习-K-means算法

没有目标值 - 无监督学习

一家广告平台需要根据相似的人口学特征和购买习惯将美国人口分成不同的小组,以便广告客户可以通过有关联的广告接触到他们的目标客户。

一个数据科学团队需要降低一个大型数据集的维度 的数量,以便简化建模和降低清单。

我们可以怎样最有用地进行对其归纳和分组?我们可以怎样以一种压缩格式有效地表征数据?这都是无监督学习的目标,之所以称之为无监督,是因为这是从无标签的数据开始学习的。

K-means原理

随机设置K个特征空间内的点作为初始的聚类中心

对于其他每个点计算到K个中心的距离,未知的点选择最近的一个聚类中心点作为标记类别

接着对着标记的聚类中心之后,重新计算出每个聚类的新中心点(平均值)

如果计算得到的新中心点与原中心点一样,那么结束,否则重新进行第二步过程

K-means应用

sklearn.cluster.KMeans(n_cluster=8,init=;k-means++’)
n_clusters:开始聚类的中心数量
init:初始化方法

对instacart_pca进行k-means聚类

K-means性能评估

轮廓系数:

对于每个点i为已聚类数据中的样本,b_i为i到其它族群的所有样本的距离最小值,a_i为i到本身簇的距离平均值。最终计算出所有的样本点的轮廓系数平均值。

轮廓系数API

sklearn.metrics.sikhouette_score(X, labels)
X:特征值
labels:被聚类标记的目标值

参考资料

机器学习发展历史回顾 https://zhuanlan.zhihu.com/p/43833351

朴素贝叶斯 https://zhuanlan.zhihu.com/p/26262151

你可能感兴趣的:(入职后的自己,机器学习,人工智能,深度学习)