概述
机器学习定义是什么?
官方定义:
-
机器学习是人工智能核心,是使计算机具有智能的根本途径。(地位)
-
机器学习专门研究计算机怎样模拟或实现人类的学习行为(研究内容),以获取新的知识或技能并改善自身的性能(研究目的)。
-
机器学习是一门人工智能的科学,该领域的主要研究对象是人工智能,特别是如何在经验学习中改善具体算法的性能。(研究领域)
-
机器学习是根据以往的经验,来改善系统自身的性能。(研究方法)
自己总结:
机器学习是实现人工智能的主要方法(手段)。机器学习的大致流程就是:先从已有数据(经验)中自动分析出模型(也就是规律),并通过模型对未知数据进行预测,它的最终目的是改善(具体)算法的性能。
机器学习能做什么?
图像识别、传统预测、NLP、推荐系统等
机器学习派别?
-
深度学习:主要用于解决神经网络问题
-
强化学习:通过计算使得奖励最大化
-
知识图谱:
基础
机器学习是从已知数据集(经验)中分析出数据模型,再根据数据模型对新的数据进行预测的过程。
数据集内容
已知数据集的内容其实就是一系列的【属性】和这些【属性对应的值】,可以用表格来直观描述。
数据集一般由【特征值】和【目标值】构成,若某算法的数据集中不带有【目标值】,则称为无监督学习。
机器学习算法分类
根据算法已有数据集是否有【目标值】,可以将算法分为监督学习和无监督学习。
其中监督学习中,若【目标值】是连续的数值,则是回归问题;若目标值是离散的类别,则是分类问题。
- 监督学习-分类问题:已有数据集中带有目标值,且目标值是类别,如:预测明天是晴天还是阴天
- 监督学习-回归问题:已有数据集中带有目标值,且目标值是连续的数值,如:预测明天多少度
- 无监督学习:已有数据集中没有目标值(标签)
举例说明:
①通过图片来识别是猫还是狗的问题中,特征值是猫狗图片,目标值是猫和狗这两个类别。(监督学习-分类问题)
②在预测房价的问题中,特征值是除房价以为的其它的房屋信息,如果地理位置、大小、层数等,目标值是房价。(监督学习-回归问题)
③通过一群人的外貌来分析他们可能哪些人可能是同一职业或者职业相近的问题中,在数据集中特征值是人的外貌,而没有目标值,这属于无监督学习。(无监督学习-聚类问题)
大致流程
大致流程:
获取数据→数据预处理→特征工程→通过学习算法(也就是进过训练)得到数据模型→验证模型→预测结果
如何学习
特征工程
什么是特征工程?
通俗理解就是:对数据的特征值进行处理,使得特征能在算法中更好地发挥作用的过程
意义:特征决定了机器学习的上限,算法只是逼近这个上限而已
数据集从哪里来?
学习阶段中,使用开源框架:
- scikit-learn(数据量小,方便学习)
- kaggle(数据量巨大,含真实数据)
- uci(覆盖各领域)
实际应用中:来自公司内部、政府内部、花钱购买数据接口等方式获取数据
scikit-learn使用
获取数据集
数据集都是从scikit-learn.datasets调用方法获取的
- 获取经典的、小型的数据集,可以直接使用,datasets.load_XXX(),其中XXX表示数据集名称
- 获取大规模数据,需要从网络上下载,datasets.fetch_XXX(data_home=下载目录)
数据集返回值
返回值类型都是datasets.base.bunh,是字典类型的子类,包含属性有
- DESC-数据集描述
- data-特征数据
- target-目标(标签)数据
- feature_names-特征名
- label_names-标签名
数据划分
机器学习中的属于一般要分成两部分,一部分用于训练得到模型,另一部分用于验证(测试)模型
- 训练数据:70%-80%
- 测试数据:20-30%
划分代码:
#数据集的划分
x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target,test_size=0.2,random_state=22)
print("训练集的特征值:\n",x_train,x_train.shape)
print("测试集的特征值:\n",x_test,x_test.shape)
特征工程主要做什么?
- 特征抽取/提取:将【任意形式的数据】转化成可以被机器学习算法所理解的【数字特征】
- 特征预处理:通过一些【转换函数】将特征数据转化为【更加适合算法模型】的特征数据的过程
- 特征降维:
特征抽取
字典特征抽取
也就是对字典类型的数据进行特征化
#获取数据
#实例化转换器
#调用fit_transform方法
转换原理是将原来的字典数据的key和value看成一个个的类别,转化成one-hot编码的矩阵,默认使用稀疏矩阵存储。
文本特征抽取
英文句子
以单词为特征值
中文句子
停用词:统计时会自动忽略掉的词汇
方法一:计算各个特征词出现的次数Count
手动或用自动分词,才会以各个词语为特征值
自动分词代码:jieba.lcut(text)
方法二:计算各个特征词的TF-IDF指标
数据预处理
一个数据集中可能各个属性的物理意义(量纲)不一样,导致各列属性值差别很大,不方便做一些运算,如在求欧氏距离时,数据值小的属性差值也小,对整体无太大意义。一般由两种处理手段,如下:
归一化
归一化就是将原始数据值映射到 [0,1]的区间上的过程,达到统一量纲的作用,归一化后的数值可以理解为一个比例值。
公式如下:
使用API:sklearn.preprocessing.MinMaxScaler
缺点:受到异常点影响很大,因为异常点经常都是最大值或最小值,归一法是基于最大最小值实现的
标准化
标准化就是把原始数据变换到均值为0,标准差为1,也就是将其转化为一个标准正态分布,也能达到统一量纲的作用。
X’=(x-平均值)/标准差
公式如下:
优点:基于平均值和标准差来计算,异常点对整体的影响不大,发挥稳定(常用)。标准化更好保持了样本间距,且更符合统计学假设。
降维
非降低维度,而是通过筛选来减少特征的个数,尽可能减少各个特征的相关程度的过程
API包:scklearn.feature_selection
特征选择法
在特征中排除掉不合适的,选择更有辨识度的主特征留下,主要有两种方法
Filter过滤式:
- 方差选择法:对于某个特征,计算所有样本本特征的方差,排查掉方差小的特征(无特征意义)。
- 求相关系数再处理:求各个特征之间的相关系数,相关系数-1<r<1,大于0代表正相关,小于0代表负相关,|r|越大则相关程度越高,0<|r|<0.4为低度相关,0.4<|r|<0.7为显著相关,0.7<|r|<1为高度相关,相关系数高的要进一步处理,如取一个作代表、加权得到新特征等。
api使用:
#方差选择法
#转换器 scklearn.feature_selection.varianceThreshold
#求相关系数
#求皮尔逊相关系数:用scipy.stats.pearsonr([],[])方法
主成分分析(PCA)
在过滤掉不合适的特征后,进一步压缩特征的个数,通过数学运算将高维数据转变为低维数据
过程:找到一条直线,通过【矩阵运算】得到主成分分析的结果
例子:将立体的水壶通过各个角度的图片来展现,从三维降低到二维
机器学习算法
假设函数:代表你通过学习算法之后建立的算法模型,例如你通过某个学习算法,从dataset中得到了一个预测房价的函数f(x),那这就是你的假设函数
代价(损失)函数:也就是表示算法模型的误差的函数,函数值越大代表误差越大,是关于θ的函数
如何求出参数θ取何值时,能使得代价函数J(θ)取值最小?
梯度下降算法
梯度下降是一种迭代算法,每迭代一次就要把所有的参数θ带入如上公式中,获得新的参数值,再继续下一次迭代,直到收敛。公式如下,其中α是学习效率,过大会导致不收敛,过小会导致收敛过慢;
缺点:
- 需要选择合适的学习率α
- 需要迭代多次才能得到最优解
正规方程法
区别于不断迭代求最优解,正规方程是一种直接通过公式直接求解的方法,公式如下,其中θ是某向量;X是m行n+1列的矩阵,每行代表一个样本的n+1个特征值;y是m行1列的矩阵,代表每个样本的目标值;
缺点:
- 对于特征值个数很多的情况时,计算时间长
特殊情况:如何【X转*X】不可逆怎么办?
这种情况很少发送,如果发生了,就要检查特征中是不是有相关的特征,减少特征数量,或者加大样本数量
方法如何选择?
特征值少时,直接用正规方程求解;特征值多时,用梯度下降