机器学习是一种人工智能技术,通过对数据的学习和分析,让计算机系统自动提高其性能。简而言之,机器学习是一种从数据中学习规律和模式的方法,通过数据来预测、分类或者决策。
机器学习的本质就是找到一个能无限接近需求的一个函数。

最基本的步骤如下:
①定一个函数集合
②判断函数的好坏
③选择最好的函数
①首先设计模型model
②通过各种方式判断模型的好坏
③根据需求,选择最好的函数,并不断优化模型
修改模型,增加数据维度
增加正则因子,使函数更加平滑,让参数w取值更小。(x变化较小时,整个函数结果 不会变化太大,结果更准)
监督学习:有数据标注情况下学习(回归、分类)
半监督学习:训练数据中带标记的数据不够多
迁移学习:在已学习基础上,做看似和以前学习不相关的事情,但实际效果很好(如在猫狗识别基础识别大象老虎等)
无监督学习:没有具体标注数据的情况下学习(机器阅读、机器绘画)
结构化学习:超越简单的回归和分类,产生结构化的结果(如图片、语言、声音)
有类别标签的学习,基于训练样本的输入、输出训练得到最优模型,再使用该模型预测新输入的输出;
代表算法:决策树、朴素贝叶斯、逻辑回归、KNN、SVM、神经网络、随机森林、AdaBoost、遗传算法;
同时使用大量的未标记数据和标记数据,进行模式识别工作;
代表算法:self-training(自训练算法)、generative models生成模型、SVMs半监督支持向量机、graph-basedmethods图论方法、 multiviewlearing多视角算法等;
无类别标签的学习,只给定样本的输入,自动从中寻找潜在的类别规则;
代表算法:主成分分析方法PCA等,等距映射方法、局部线性嵌入方法、拉普拉斯特征映射方法、黑塞局部线性嵌入方法、局部切空间排列方法等;
已知输入变量x,通过求解条件概率分布P(y|x)或者直接计算y的值来预测y。
例如:
- 线性回归(Linear Regression)
- 逻辑回归(Logistic Regression)
- 支持向量机(SVM)
- 传统神经网络(Traditional Neural Networks)
- 线性判别分析(Linear Discriminative Analysis)
- 条件随机场(Conditional Random Field)
已知输入变量x,通过对观测值和标注数据计算联合概率分布P(x,y)来达到判定估算y的目的。
例如:
- 朴素贝叶斯(Naive Bayes)
- 隐马尔科夫模型(HMM)
- 贝叶斯网络(Bayesian Networks)
- 隐含狄利克雷分布(Latent Dirichlet Allocation)
如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。
1)计算已知类别数据集中的点与当前点之间的距离
2)按距离递增次序排序
3)选取与当前点距离最小的k个点
4)统计前k个点所在的类别出现的频率(
分类:样本出现最多个数回归:K个杨样本的平均值)5)返回前k个点出现频率最高的类别作为当前点的预测分类
① K值选择
K值的减小就意味着整体模型变得复杂,容易发生过拟合;
K值的增大就意味着整体模型变得简单,容易发生欠拟合;
注:实际应用中,K值一般取一个比较小的数值,例如采用交叉验证来选择最优的K值。
② 误差估计
近似误差:对训练集的训练误差,关注训练集,近似误差小可能出现过拟合。
估计误差:对测试集的测试误差,关注测试集,估计误差小说明对未知数据的预测能力好。
计算输入实例与每一个训练实例的距离。计算后再查找K近邻。当训练集很大时,计算非常耗时。
①一种对k维空间中的实例点进行存储以便对其进行快速检索的树形数据结构
②kd树是一种二叉树,表示对k维空间的一个划分,构造kd树相当于不断地用垂直于坐标轴的超平面将K维空间切分,构成一系列的K维超矩形区域。kd树的每个结点对应于一个k维超矩形区域。
③利用kd树可以省去对大部分数据点的搜索,从而减少搜索的计算量。
①欧式距离(Euclidean Distance)

②曼哈顿距离(Manhattan Distance)

③切比雪夫距离 (Chebyshev Distance)

- # -*- coding: UTF-8 -*-
- import numpy as np
- import operator
- import collections
-
- """
- 函数说明:创建数据集
- Parameters:
- 无
- Returns:
- group - 数据集
- labels - 分类标签
- Modify:
- 2017-07-13
- """
-
-
- def createDataSet():
- # 四组二维特征
- group = np.array([[1, 101], [5, 89], [108, 5], [115, 8]])
- # 四组特征的标签
- labels = ['爱情片', '爱情片', '动作片', '动作片']
- return group, labels
-
-
- """
- 函数说明:kNN算法,分类器
- Parameters:
- inX - 用于分类的数据(测试集)
- dataSet - 用于训练的数据(训练集)
- labes - 分类标签
- k - kNN算法参数,选择距离最小的k个点
- Returns:
- sortedClassCount[0][0] - 分类结果
- """
-
-
- def classify0(inx, dataset, labels, k):
- # 计算距离
- dist = np.sum((inx - dataset) ** 2, axis=1) ** 0.5
- # k个最近的标签
- k_labels = [labels[index] for index in dist.argsort()[0: k]]
- # 出现次数最多的标签即为最终类别
- label = collections.Counter(k_labels).most_common(1)[0][0]
- return label
-
-
- if __name__ == '__main__':
- # 创建数据集
- group, labels = createDataSet()
- # 测试集
- test = [101, 20]
- # kNN分类
- test_class = classify0(test, group, labels, 3)
- # 打印分类结果
- print(test_class)
利用回归方程(函数)对一个或多个自变量(特征值)和因变量(目标值)之间关系进行建模的一种分析方式。
