print('Hello World!')
我一直相信, 兴趣是最好的老师!所以对新事物开始的学习,我总喜欢以问题为导向,“所学的东西到底能帮我们解决什么问题?”来引导我不断学习新知识,等有一定理解后再深入学习会事半功倍。《机器学习实战》以平铺直叙的表述和直接上手的简单例子,来帮助没有太多基础的人入门,也是我选择作为第一本入门书籍的原因。带着这是什么,可以用来做什么,为什么要这么做和该怎么做的思路,开始我的学习旅程!这是一个小白的起步,可能其中很多理解有误的地方,也欢迎大家指正,一起学习!
第一章 – 什么是机器学习
机器学习,本质通俗解释为将无序的数据转换为有用的信息。这里的数据理解为源数据,即通过各种渠道第一时间接受到的并且没有经过处理的数据,如我们日常生活中的传感器,实现了数据采集(Data Acquisition)的功能,大多源数据是无序的。然后通过对数据进行“加工”处理,经过分析提炼可以得到对我们了解事物或者决策有用的信息。
专业术语
起步前需要理解一些专业术语。首先是学习,学习就是一个“训练(training)”过程,打个比方,通过告诉智能程序已知的问题和答案,训练他自己来摸索所给问题和对应答案的规律及联系,然后你再出一个问题给他,他就套用刚才的“规律”告诉你计算的答案。但实际情况远远比这复杂的多,如果将问题建模处理,其中可能大多参数是不确定的,且不是人为确定的,这时就用一大堆已知的条件来“训练”程序。使得计算机计算的参数和实际误差最小,这就是训练的目的。
其中,我们已知的条件就称为训练集(train set),是训练机器学习算法的数据样本集合。而训练样本(training examples)是训练集的子集,是已经分好类(贴了标签)的数据样本。训练样本的特征(features),也叫属性(attributes),直观来看就是训练样本的列,他们是独立测量得到的结果,多个特征联系在一起共同组成一个训练样本。训练样本中的目标变量必须是已知的,才能发现特征和目标变量的关系。目标变量(target variable),目标变量是机器学习算法的预测结果,也就是我们说的类(或者标签),好比红嘴鸥和鸟,当一种飞禽具有了红嘴鸥的特征,我们就把这种动物归为鸟类,因为红嘴鸥是鸟。在分类算法(等下会讲)中目标变量的类型通常是离散型的, 而在回归算法中通常是连续型的。分类问题中的目标变量被称为类别, 并假定分类问题只存在有限个数的类别。
训练集作为算法的输入,其他还有验证集和测试集。训练集用来建立数据模型,验证集(validation set)用来确定网络结构或者控制模型复杂程度的参数,而测试集(test set)则检验最终选择最优的模型的性能如何,输入测试样本时并不提供测试样本的目标变量, 由程序决定样本属于哪个类别。最后,比较测试样本预测的目标变量值与实际样本类别之间的差别, 就可以得出算法的实际精确度。
学习方式
监督学习(Supervised Learning)通过发现数据属性和类别属性之间的关联模式,并通过利用这些模式来预测未知数据实例的类别属性。这类算法必须知道预测什么,即知道目标变量的分类信息。其中,分类和回归属于监督学习。分类(classification)就是将实例数据划分到合适的分类中。分类问题是用于将事物打上一个标签,通常结果为离散值。例如判断一幅图片上的动物是一只猫还是一只狗。分类并没有逼近的概念,最终正确结果只有一个,错误的就是错误的,不会有相近的概念。最常见的分类方法是逻辑回归,或者叫逻辑分类。回归(regression)是对真实值的一种逼近预测。回归问题通常是用来预测一个数值型数据。如预测房价、未来的天气情况等等,例如一个产品的实际价格为500元,通过回归分析预测值为499元,我们认为这是一个比较好的回归分析。一个比较常见的回归算法是线性回归算法(LR)。监督学习包含算法:k-邻近算法、线性回归、朴素贝叶斯算法、局部加权线性回归、支持向量机、Ridge回归、决策树、Lasso最小回归系数估计等。
非监督学习(Unsupervised Learning)中数据并不被特别标识,学习模型是为了推断出数据的一些内在结构。此时数据没有类别信息, 也不会给定目标值。如果数据的类别存在并且已知,则我们可以应用监督学习。但在一些应用中,数据的类别属性是缺失的,用户希望通过浏览数据来发现其中的某些内在 结构。聚类(Clustering)就是一种发现这种内在结构的技术。聚类把全体数据实例组织成一些相似组,这些相似组被称作聚类(cluster),这就是非监督学习的应用。密度估计(density estimation),即用统计值来描述数据,比如根据已有的结果,给每个值在未来出现在结果中的概率打个分。非监督学习的另一个用途是将含有多个属性或特征的数据降维。非监督学习包含算法:K-均值、最大期望算法、DBSCAN、Parzcn窗设计。
监督学习和非监督学习的区别与联系汇总:
有监督学习方法必须要有训练集与测试样本。在训练集中找规律,而对测试样本使用这种规律;而非监督学习没有训练集这一说,只有一组数据,在该组数据集内寻找规律。
有监督学习方法的目的就是识别事物,识别的结果表现在给待识别数据加上了分类标号。因此训练样本集必须由带分类标号的样本组成。而非监督学习方法只有要分析的数据集本身,预先没有什么标号。如果发现数据集呈现某种聚集性,则可按自然的聚集性分类,但不以与某种预先的分类标号对上号为目的。
非监督学习方法在寻找数据集中的规律性,这种规律性并不一定要达到划分数据集的目的,也就是说不一定要“分类”。这一点是比有监督学习方法的用途要广泛。譬如分析一堆数据的主分量,或分析数据集有什么特点都可以归于非监督学习方法的范畴。
用什么算法:
首先分析我们要使用算法的目的:如果想要预测目标变量的值, 则可以选择监督学习算法, 否则可以选择非监督学习算法。其次是观察数据的特征, 是离散型变量还是连续型变量, 特征值中是否存在缺失的值等。根据多方面因素考虑最适合最有效的算法解决问题,j具体问题具体分析。
开发学习应用程序的步骤
收集数据
准备输入数据(list或matrix)
分析输入数据(可能人工分析)
训练算法
测试算法(评测结果)
使用算法
以上步骤我们将在接下来的实例中一一验证,在此不赘述。
Python的安装我比较推荐使用Anaconda,这个集成了很多需要计算的包和模块。可以让我们更关注于问题本身,不会浪费时间的同时,也不会让我们失去信心和耐心!第一章稍微会讲的比较详细是在于理论知识必须掌握牢靠。道、术和器的修炼必须同时进行,一个都不能落。
我自己的博客地址为:谢雨熹的学习博客
欢迎大家来交流!
Talk is cheap, show me your code!