机器学习现在很火的,纯纯的行业红海,虽然我已经脱离计算机行业了,但是我觉得,机器学习还是有必要学一下的,说不定以后会用的上呢,所以,乘着现在研一时间还比较多,除了自己研究方向以外,剩下的时间可以好好学一学。
首先嘞,先说一下我用的书:西瓜书太博(真)大(看)精(不)深(懂)了,我用的是清华大学出版社出版的吕云翔等人编写Python机器学习实战。
首先,我们先来看一下机器学习的定义:对于某类任务T和性能度量P,一个计算机程序被认为可以从经验E中学习是指:经过检验E改进之后,其在T上的性能度量P有所提升。
机器学习的组成:
机器学习算法需要三方面的要素:数据、模型、性能度量准则:
1、数据方面:数据中蕴含了数据的分布规律,我们从一线获得的数据往往是“脏数据”,就是说,里面包含了大量的缺失值、冗余值,而且不同维度获得的数据的量纲也往往不尽相同,那么,对于这样的脏数据,我们首先要做的就是数据清洗:通过先期的特征工程进行预处理。
2、模型方面:选择一个正确的模型来对数据建模也是很重要的,模型选择的恰当与否意味着我们的结果是否能打到预期的要求
3、性能度量准则:用来指导机器学习模型进行模型参数求解的,这个过程被称为训练,其目的是让性能准则在给定数据集上达到最优,训练一个机器学习模型王网要对大量的参数进行反复调整,这个过程就是调参,在训练之前调整设置的参数是超参数。
常见的机器学习分类方法:
1、分类问题和回归问题
2、监督学习、半监督学习、无监督学习
3、生成模型和判别模型
模型评估方法:
1、训练误差以及泛化误差:我们对于一批数据,通常会将数据划分为训练集、验证集、测试集这三个部分,训练集用于对模型的参数进行训练,验证集用来对训练的模型进行验证和挑选,辅助调参,测试集用于测试训练完成的模型的泛化能力。
在训练集上,训练过程中使用训练误差来衡量模型对训练数据的拟合能力,在测试集上则使用泛化误差来测试模型的泛化能力,模型得到充分训练的条件下,训练误差和泛化误差之间的差异越小,说明模型的泛化性越好。
2、过拟合、欠拟合:
欠拟合:训练损失较大的时候,模型不能够对数据进行很好的你和,这种情况就被称为欠拟合,训练误差小而且明显低于泛化误差的时候,这种情况被称为过拟合,这个时候,模型的泛化能力较弱(简单理解就是,针对这一个特定的问题,他的效果非常好,但是应用在其他同类型问题的时候,效果往往不尽人意)
书上给了个过拟合以及欠拟合的例子:针对来看看过拟合和欠拟合:
![拟合效果](https://i-blog.csdnimg.cn/blog_migrate/e32046b2b75ee656bfdde650e8727fd9.png)
好了,我们来看看正则化:
正则化是一种抑制模型复杂度的常用方法,正则化用模型参数的p范数进行进行表示为:
常用的正则化方式为p=1或者p=2,分别是L1正则化和L2正则化,正则化项一般作为损失函数的一部分呗加入到原来的基于数据的损失函数红,基于数据的损失函数又称为经验损失,正则化项目又被称为结构损失,如果我们把原来基于数据的损失函数结尾,带有正则化象得损失函数记为
,最终的损失函数可以记为:
其中,
是用于在模型的经验损失和结构损失之间进行平衡的超参数。
L1正则化可能得到的不止一个最优解,,L2正则化得到的解更加平滑。实际应用当中,由于L2正则化有着良好的数学性质,在计算上更加方便,所以人们多会选择使用L2正则化来防止过拟合。
这次学习,主要会用到torch模块和sklearn模块,sklearn.datasets中收集一些标准数据集,,通过load函数来加载,他的返回值是一个sklearn.utils.Bunch类型的变量,最重要的成员是是data和target风别表示数据集的特征和标签。
from sklearn.datasets import load_iris
iris=load_iris()
x=iris.data
y=iris.target
print(x)
print(y)
![](https://i-blog.csdnimg.cn/blog_migrate/0665649d75a65bffe4026edc40ee3eb3.png)
![](https://i-blog.csdnimg.cn/blog_migrate/57c74bd867cba65a680237764019c0f6.png)
from sklearn.datasets import load_breast_cancer
bc=load_breast_cancer()
print(bc.DESCR)
![](https://i-blog.csdnimg.cn/blog_migrate/327eee1176956924446d4642f7b9a99b.png)
sklearn.model_selection中提供了有关模型选择的一系列工具,包括验证及划分、交叉验证等,验证集与训练集的划分是所有项目都需要的。