什么是机器学习
机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。
它是人工智能核心,是使计算机具有智能的根本途径。
即使这样说来可能仍然很模糊,下面可以通过一张具体的路线图来了解机器学习
回归和分类
回归(Regression) 就是找到一个函数 function,通过输入特征 x,输出一个数值 Scalar。比较像我们常见的函数拟合。
在这里左侧为线性回归,而右侧为非线性
分类是事先定义好类别,类别数不变。 分类器需要由人工标注的分类训练语料训练得到,属于有指导学习范畴.
监督学习和无监督学习
监督学习
从给定的训练数据集中学习出一个函数(模型参数),当新的数据到来时,可以根据这个函数预测结果。监督学习的训练集要求包括输入输出,也可以说是特征和目标。训练集中的目标是由人标注的。监督学习就是最常见的分类(注意和聚类区分)问题,通过已有的训练样本(即已知数据及其对应的输出)去训练得到一个最优模型,再利用这个模型将所有的输入映射为相应的输出,对输出进行简单的判断从而实现分类的目的。监督学习的目标往往是让计算机去学习我们已经创建好的分类系统(模型)。
无监督学习
输入数据没有被标记,也没有确定的结果。样本数据类别未知,需要根据样本间的相似性对样本集进行分类(聚类,clustering)。
通俗点将就是实际应用中,不少情况下无法预先知道样本的标签,也就是说没有训练样本对应的类别,因而只能从原先没有样本标签的样本集开始学习分类器设计。
机器学习方向
机器学习主要包括计算机视觉,语音识别,自然语言处理三大方面。当然还带有一些其他的小方面。
我们可以具体通过一张图片来了解
计算机视觉方向
在计算机视觉方向有四大任务:
图像分类
给定一系列标记为单标签的图像,希望成功预测出未经标记的新的数据的标签。
目标检测
object detection的任务是检测到图像中的目标并分类出目标种类。
语义分割
计算机视觉的核心是分割过程,它将整个图像分成像素分组,然后可以对其进行标记和分类。特别地,语义分割试图在语义上理解图像中每个像素的角色(例如,它是汽车,摩托车还是其他类型的类)。例如,在上图中,除了识别人,道路,汽车,树木等之外,我们还必须划定每个物体的边界。因此,与分类不同,我们需要从我们的模型进行像素级的预测。
实例分割
实例分段还将不同的实例分类,例如用5种不同颜色标记5辆汽车。我们看到多个重叠物体和不同背景的复杂景点,我们不仅分类这些不同的物体,而且还确定它们的边界,差异和彼此之间的关系!
自然语言处理方向
一些应用有文本分类、AI写作、AI翻译等等,这里不再提供其他内容。
KNN算法教学
KNN理论教学
K最近邻(K-Nearest Neighbor)算法核心思想是如果一个样本在特征空间中的k个最临近的样本中的大多数属于某一个类别,则该样本也属于这个类别。
从图来理解就是:
鸢尾花(iris)数据集
Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集。
数据集包含150个数据样本,分为3类,每类50个数据,每个数据包含4个属性。
可通过花萼长度,花萼宽度,花瓣长度,花瓣宽度4个属性预测鸢尾花卉属于(Setosa,Versicolour,Virginica)三个种类中的哪一类。
通过KNN模型实现对鸢尾花数据集的分类处理
from sklearn import datasets#sklearn自带的数据库from sklearn.model_selection import train_test_split#分离traindata和testdata的模块*from sklearn.neighbors import KNeighborsClassifier#KNN算法,详情百度*iris = datasets.load_iris()iris_X = iris.datairis_Y = iris.targetX_train, X_test, y_train, y_test = train_test_split(iris_X, iris_Y, test_size=0.3)#这里把所有的data分为要用于学习的data和要用于测试的data,好处是他们不会互相影响#需要分开的数据为iris_X和iris_y,其中测试的比例占30%print('iris_Y :', iris_Y)# 这里是排列好了的数据print('y_train :', y_train)# 而这里是打乱了的数据,更利于分析print('\n')knn = KNeighborsClassifier()knn.fit(X_train, y_train)print('predict : ', knn.predict(X_test))print('real data : ', y_test) print('score : ', knn.score(X_test, y_test))
输出结果
iris_Y : [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2]y_train : [0 2 0 0 0 2 1 1 2 1 2 1 0 2 2 0 0 1 2 2 1 1 0 0 0 0 2 2 2 0 0 0 1 0 0 0 01 1 1 2 2 0 1 1 2 2 0 2 2 0 1 2 0 1 1 0 2 1 0 2 1 1 2 2 1 2 2 1 0 1 0 0 21 0 1 0 0 2 2 2 2 1 1 1 1 0 2 2 1 2 1 0 0 2 0 2 2 2 0 0 2 2 1]predict : [0 2 1 1 0 1 1 2 0 2 2 2 1 1 0 0 2 1 1 2 2 1 2 0 0 0 1 1 1 1 0 0 2 1 2 2 10 0 0 0 1 1 2 1]real data : [0 2 1 1 0 1 1 2 0 2 2 2 1 1 0 0 2 1 1 2 2 1 2 0 0 0 1 1 1 1 0 0 2 1 1 2 10 0 0 0 1 1 2 1]score : 0.9777777777777777