机器学习
第二章——算法
目录
前言
本章内容为机器学习系列第二章,主要为机器学习的一些算法基础,查看第一章内容请转到>>>零基础学机器学习(基于Python Scikit-learn) 第一章
五、机器学习概述
5.1机器学习开发流程
机器学习模型是什么?
- 通过一种映射关系将输入值到输出值
5.2机器学习算法分类
5.2.1监督学习和无监督学习
- 监督学习
分类: k-近邻算法、贝叶斯分类、决策树与随机森林、逻辑回归、神经网络
回归: 线性回归、岭回归
标注: 隐马尔可夫模型 - 无监督学习
聚类: k-means
监督学习(Supervised learning),可以由输入数据中学到或建立一个模型,并依此模式推测新的结果。输入数据是由输入特征值和目标值所组成。函数的输出可以是一个连续的值(称为回归),或是输出是有限个离散值(称作分类)。
无监督学习(Supervised learning),可以由输入数据中学到或建立一个模型,并依此模式推测新的结果。输入数据是由输入特征值所组成。
5.2.2分类问题
概念: 分类是监督学习的一个核心问题,在监督学习中,当输出变量取有限个离散值时,预测问题变成为分类问题。最基础的便是二分类问题,即判断是非,从两个类别中选择一个作为预测结果;
分类在于根据其特性将数据“分门别类”,所以在许多领域都有广泛的应用
- 在银行业务中,构建一个客户分类模型,按客户按照贷款风险的大小进行分类
- 图像处理中,分类可以用来检测图像中是否有人脸出现,动物类别等
- 手写识别中,分类可以用于识别手写的数字
- 文本分类,这里的文本可以是新闻报道、网页、电子邮件、学术论文
5.2.3回归问题
概念: 回归是监督学习的另一个重要问题。回归用于预测输入变量和输出变量之间的关系,输出是连续型的值。
回归在多领域也有广泛的应用
- 房价预测,根据某地历史房价数据,进行一个预测
- 金融信息,每日股票走向
六、数据集与估计器
6.1数据集划分
机器学习一般的数据集会划分为两个部分:
- 训练数据:用于训练,构建模型
- 测试数据:在模型检验时使用,用于评估模型是否有效
- 一般训练集:测试集=7:3或8:2
6.2sklearn数据集接口
sklearn数据集划分API: sklearn.model_selection.train_test_split
scikit-learn数据集API语法:
- sklearn.datasets
加载获取流行数据集 - datasets.load_*()
获取小规模数据集,数据包含在datasets里 - datasets.fetch_*(data_home=None)
获取大规模数据集,需要从网络上下载,函数的第一个参数是data_home,表示数据集下载的目录,默认是~/scikit_learn_data/
获取数据集返回的类型:
- load和fetch返回的数据类型datasets.base.Bunch(字典格式)
- data:特征数据数组,是 [n_samples * n_features] 的二维numpy.ndarray 数组
- target:标签数组,是 n_samples 的一维 numpy.ndarray 数组
- DESCR:数据描述
- feature_names:特征名,新闻数据,手写数字、回归数据集没有
- target_names:标签名,回归数据集没有
示例代码:
from sklearn.datasets import load_iris #鸢尾花数据集
li = load_iris()
print("获取特征值")
print(li.data)
print("目标值")
print(li.target)
print(li.DESCR)
6.3sklearn分类、回归数据集
数据集进行分割:
- sklearn.model_selection.train_test_split(*arrays, **options)
x 数据集的特征值
y 数据集的标签值 - test_size 测试集的大小,一般为float
- random_state 随机数种子,不同的种子会造成不同的随机采样结果。相同的种子采样结果相同。
- return 训练集特征值,测试集特征值,训练标签,测试标签(默认随机取)
用于分类的大数据集:
- sklearn.datasets.fetch_20newsgroups(data_home=None,subset=‘train’)
- subset: ‘train’或者’test’,‘all’,可选,选择要加载的数据集训练集的“训练”,测试集的“测试”,两者的“全部”
- datasets.clear_data_home(data_home=None)
清除目录下的数据
sklearn回归数据集:
- sklearn.datasets.load_boston()
加载并返回波士顿房价数据集 - sklearn.datasets.load_diabetes()
加载和返回糖尿病数据集
6.4估计器
在sklearn中,估计器(estimator)是一个重要的角色,分类器和回归器都属于estimator,是一类实现了算法的API
1、用于分类的估计器:
- sklearn.neighbors k-近邻算法
- sklearn.naive_bayes 贝叶斯
- sklearn.linear_model.LogisticRegression 逻辑回归
2、用于回归的估计器:
- sklearn.linear_model.LinearRegression 线性回归
- sklearn.linear_model.Ridge 岭回归
估计器的工作流程:
- - - >>>返回目录<<< - - -
七、K-近邻算法
分类算法-k近邻算法(KNN)
定义:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。
来源:KNN算法最早是由Cover和Hart提出的一种分类算法
计算距离公式:
两个样本的距离可以通过如下公式计算,又叫欧式距离
比如说,a(a1,a2,a3),b(b1,b2,b3)
sklearn 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方法的值来决定最合适的算法。 (不同实现方式影响效率)
k值取很小:容易受异常点影响
k值取很大:容易受最近数据太多导致比例变化
k-近邻算法优缺点
优点:
- 简单,易于理解,易于实现,无需估计参数,无需训练
缺点:
- 懒惰算法,对测试样本分类时的计算量大,内存开销大
- 必须指定K值,K值选择不当则分类精度不能保证
使用场景:
- 小数据场景,几千~几万样本,具体场景具体业务去测试
八、朴素贝叶斯算法
联合概率和条件概率:
-
联合概率:包含多个条件,且所有条件同时成立的概率
记作: