机器学习笔记第二章
超参数和模型参数概念
超参数:在算法运行前需要决定的参数
模型参数:算法过程中学习的参数
KNN算法没有模型参数,其算法中的 k是典型的超参数
如何寻找好的超参数
- 领域知识
- 经验数值
- 实验搜索
超参数之间可能存在依赖关系
K近邻算法
sklearn.neighbors.KNeighborsClassifier
参数 weights default = “uniform”(不考虑距离的权重)
= distance (考虑距离的权重)
其中构造函数中含有 p 的参数,default = 2 也就是默认是欧拉距离
metric 参数 default ‘minkowski’ (超参数)
更多关于距离的定义
欧拉距离:
曼哈顿距离:(两个点在每个维度上的距离的和)
明可夫斯基距离:(获得了新的超参数 p)
搜索名称:
网格搜索:
sklearn 封装函数寻找最优的超参数
更多的距离定义:
向量空间余弦相似度 Cosine Similarity
调整余弦相似度 Adjusted Cosine Similarity
皮尔森相关系数 Pearson Correlation Coefficient
Jaccard相似系数 Jaccard Coefficient
数据归一化 Feature Scaling
为什么需要数据的归一化?
量纲不同导致不同的单位的量之间的差距不能准确的统计,不能反应样本的
每一个特征的重要程度。
数据归一化:将所有的数据映射到同一尺度中
最值归一化(normalization):把所有的数据映射到 0-1 之间
适用于分布有明显边界的情况;受outlier(离群值,极端值)影响较大
**均值方差归一化(standardization):**把所有的数据归一到均值为0方差为1的分布中
适用于数据分布没有明显的边界;有可能存在极端数据值
如何对测试数据集进行归一化处理?
训练数据集进行归一化处理:mean_train std_train
测试数据集也需要进行归一化处理:(x_test - mean_train) / std_train
原因:
测试数据是模拟真实环境,真实环境很有可能无法得到所有测试
数据的均值和方差,对数据的归一化也是算法的一部分
需要保存训练数据集得到的均值和方差
scikit-learn 当中封装的Scalar函数
**MinMaxScaler **最值归一化的调用
更多有关k近邻算法的思考
解决分类问题的算法
天然可以解决多分类问题
思想简单,效果强大
可以使用k近邻算法解决回归问题
对于要预测的结点找到离他最近的k个结点
KNeighborsRegressor : http://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsRegressor.html (K近邻算法解决回归问题封装的类)
缺点1:效率低下
如果训练集有m个样本,n个特征,则预测每一个新的数据,需要O(m*n)
优化:使用树的结构:KD-Tree,Ball-Tree
缺点2:高度数据相关,对outlier的值更加的敏感
缺点3:预测结果不具有可解释性
缺点4:维数灾难 (随着维度的增加,"看似相近"的两个点之间的距离越来越大)
解决方法:降维 (简单的处理方法:PCA)
机器学习流程回顾: