一、评测标准

  • 模型的测评标准:分类的准确度(accuracy);
  • 预测准确度 = 预测成功的样本个数/预测数据集样本总数;

二、超参数

  • 超参数:运行机器学习算法前需要指定的参数;
  • kNN算法中的超参数:k、weights、P;
  • 一般超参数之间也相互影响;
  • 调参,就是调超参数;

 1)问题

  # 以kNN算法为例

  1. 平票:如果k个点中,不同类型的样本数相等,怎么选取?
  2. 如果选取的k个点中,数量多的一类样本点距离测试样本较远,数量少的一类样本点距离测试样本较近,此时选取数量较多的类型作为输出结果,不具说服力;

 2)kNN算法中,除了K值外的另一个超参数:距离的权重(1/距离)

  • k个点中,将不同类的点的权重相加,最大的那一类为目标标签
  1. scikit-learn库中的KNeighborsClassifier类中,还有一个weights()函数;
  2. 在__init__()中默认两个参数值:__init__(n_neighbors = 5, weights = 'uniform');
  3. weights = 'uniform',表示不考虑距离权重这个超参数;
  4. weights= 'distance',表示考虑距离权重这个超参数;

 3)kNN算法的第三个超参数:P,距离参数

  • P是有“明科夫斯基距离”得来的(详见“四、距离推导”),
  • 只有当kNN算法考虑距离权重超参数(weights)时,才会考虑是否输入距离参数(P);

 4)调参的方法

  • 调参目的,找到最优的超参数;
  • 机器学习算法应用在不同的领域中,不同领域内有其特有的知识
  1、通过领域知识得到

   # 不同领域内,遇到不同的问题,产参数一般不同;

   # 领域:如自然语言处理、视觉搜索等;

  2、经验数值

   # 一般机器学习算法库中,会封装一些默认的超参数,这些默认的超参数一般都是经验数值;

   # kNN算法这scikit-learn库中,k值默认为5,5就是在经验上比较好的数值;

  3、通过试验搜索得到
  • 思路:将不同的超参数输入模型,选取准确度最高的超参数;
  • 试验搜索也称为网格搜索:对不同的超参数,使用对个for语句,逐层搜索;
  • 试验搜索过程:以kNN算法为例;
    # 在Jupyter NoteBook中实现的代码
    
    import numpy as np
    from sklearn import datasets digits = datasets.load_digits()
    X = digits.data
    y = digits.target from ALG.train_test_split import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_train = 0.2) # 1)按经验选定超参数k = 5
    from sklearn.neighbors import KNeighborsClassifier knn_clf = KNeighborsClassifier(n_neighbors = 5)
    knn_clf.fit(X_train, y_train)
    knn_clf.score(X_test, y_test) # 2)按试验搜索,获取最优的超参数K,不考虑weights
    best_score = 0.0
    best_k = -1
    for k in range(1, 11):
    knn_clf = KNeighborsClassifier(n_neighbors = k)
    knn_clf.fit(X_train, y_train)
    knn_score = knn_clf.score(X_test, y_test)
    if knn_score > best_score:
    best_score = knn_score
    best_k = k print("best_k = ", best_k)
    print("best_score = ", best_score) # 3)按试验搜索,获取最优的超参数k、weight
    best_method = ""
    best_score = 0.0
    best_k = -1
    for method in ["uniform", "distance"]:
    for k in range(1, 11):
    knn_clf = KNeighborsClassifier(n_neighbors = k)
    knn_clf.fit(X_train, y_train)
    knn_score = knn_clf.score(X_test, y_test)
    if knn_score > best_score:
    best_score = knn_score
    best_k = k
    best_method = method print("best_mrthod = ", best_method)
    print("best_k = ", best_k)
    print("best_score = ", best_score) # 4)试验搜索,获取最优产参数k、P(weights必须为distance)
    %%time best_p = -1
    best_score = 0.0
    best_k = -1
    for k in range(1, 11):
    for p in range(1, 6):
    knn_clf = KNeighborsClassifier(n_neighbors = k, weights = "distance", p = p)
    knn_clf.fit(X_train, y_train)
    knn_score = knn_clf.score(X_test, y_test)
    if knn_score > best_score:
    best_score = knn_score
    best_k = k
    best_p = p print("best_p = ", best_p)
    print("best_k = ", best_k)
    print("best_score = ", best_score) 

 5)其它

  1. ** 一般不同的超参数决定了不同的分类的准确率,它们之间呈连续变化;如果最终找到的最优的超参数为范围的边界值,意味着可能有更优的取值在边界的外面,所以要拓展搜索范围重新查询最优的超参数;
  2. 以上代码包含了调用scikit-learn库内的算法:导入模块、实例化、fit、调参(选取最优超参数)、预测

三、模型参数

 # 模型参数:算法过程中学习的参数;

 # kNN算法中没有模型参数,因为它没有模型;

 # 线性回归算法和逻辑回归算法,包含有大量的模型参数;

 # 什么是模型选择?

四、距离推导

  • 欧拉距离:math.sqrt(np.sum((X1 - X2) ** 2)),向量X1与向量X2的欧拉距离;
  • 曼哈顿距离:np.sum(|X1 - X2|),向量X1与向量X2的曼哈顿距离;
  • 明科夫斯基距离:由欧拉距离和曼哈顿距离推到出;
  • 下图从上至下:曼哈顿距离、欧拉距离、明科夫斯基距离;
  • 在明科夫斯基距离中:
  1. 当P = 1,明科夫斯基距离 == 曼哈顿距离;
  2. 当P = 2,明科夫斯基距离 == 欧拉距离;
  3. 当P >= 3,对应的明科夫斯基距离为其它距离;

机器学习:调整kNN的超参数的更多相关文章

  1. 【笔记】KNN之超参数

    超参数 超参数 很多时候,对于算法来说,关于这个传入的参数,传什么样的值是最好的? 这就涉及到了机器学习领域的超参数 超参数简单来说就是在我们运行机器学习之前用来指定的那个参数,就是在算法运行前需要决 ...

  2. 机器学习-kNN-寻找最好的超参数

    一 .超参数和模型参数 超参数:在算法运行前需要决定的参数 模型参数:算法运行过程中学习的参数 - kNN算法没有模型参数- kNN算法中的k是典型的超参数 寻找好的超参数 领域知识 经验数值 实验搜 ...

  3. 【笔记】KNN之网格搜索与k近邻算法中更多超参数

    网格搜索与k近邻算法中更多超参数 网格搜索与k近邻算法中更多超参数 网络搜索 前笔记中使用的for循环进行的网格搜索的方式,我们可以发现不同的超参数之间是存在一种依赖关系的,像是p这个超参数,只有在 ...

  4. 机器学习超参数优化算法-Hyperband

    参考文献:Hyperband: Bandit-Based Configuration Evaluation for Hyperparameter Optimization I. 传统优化算法 机器学习 ...

  5. 机器学习算法中如何选取超参数:学习速率、正则项系数、minibatch size

    机器学习算法中如何选取超参数:学习速率.正则项系数.minibatch size 本文是<Neural networks and deep learning>概览 中第三章的一部分,讲机器 ...

  6. Spark2.0机器学习系列之2:基于Pipeline、交叉验证、ParamMap的模型选择和超参数调优

    Spark中的CrossValidation Spark中采用是k折交叉验证 (k-fold cross validation).举个例子,例如10折交叉验证(10-fold cross valida ...

  7. 机器学习:SVM(scikit-learn 中的 RBF、RBF 中的超参数 γ)

    一.高斯核函数.高斯函数 μ:期望值,均值,样本平均数:(决定告诉函数中心轴的位置:x = μ) σ2:方差:(度量随机样本和平均值之间的偏离程度:, 为总体方差,  为变量,  为总体均值,  为总 ...

  8. TensorFlow从0到1之TensorFlow超参数及其调整(24)

    正如你目前所看到的,神经网络的性能非常依赖超参数.因此,了解这些参数如何影响网络变得至关重要. 常见的超参数是学习率.正则化器.正则化系数.隐藏层的维数.初始权重值,甚至选择什么样的优化器优化权重和偏 ...

  9. TensorFlow实现超参数调整

    TensorFlow实现超参数调整 正如你目前所看到的,神经网络的性能非常依赖超参数.因此,了解这些参数如何影响网络变得至关重要. 常见的超参数是学习率.正则化器.正则化系数.隐藏层的维数.初始权重值 ...

随机推荐

  1. vRA7 Business error “Untrusted certificate chain”

    报错截图: 服务无法注册 第一步:登录vRB 5480页面,取消到vRA的注册 第二部:SSH登录到VRB中,查看bio-ssl.keystore.password. cat /shared/cata ...

  2. freemarker空值的处理

    FreeMarker的变量必须赋值,否则就会抛出异常.而对于FreeMarker来说,null值和不存在的变量是完全一样的,因为FreeMarker无法理解null值.FreeMarker提供两个运算 ...

  3. MySQL实时性能监控工具doDBA tools

    doDBA tools是什么? doDBA tools是一个基于控制台的远程监控工具,它不需要在本地/远程系统上安装任何软件,它可以实时收集操作系统.MySQL.InnoDB的实时性能状态数据,并可以 ...

  4. easyui控件使用例子

    1.easyui之dataGrid分页加载数据例子 注意:1)分页表格通过url获得数据会提交page,rows两个参数:后台需要获取这两个参数并且由此得到 int pageSize=rows/pag ...

  5. 执行Oracle存储过程报权限不足的解决方法

    当前Oracle用户sofa拥有connect.dba.resource的角色权限,但奇怪的是却没有执行Oracle Procedure的权限.后来通过查找资料发现:如果sofa用户需要执行Proce ...

  6. ML 神经网络 NeuralNetworks

    神经网络 Neural Networks 1 为什么要用神经网络? 既然前面降了逻辑回归,为什么还需要神经网络呢?前面我们制定在非线性分类问题中,也可以使用逻辑回归进行分类,不过我们的特征变量就变成了 ...

  7. POJ 3667 & HDU 3308 & HDU 3397 线段树的区间合并

    看到讲课安排上 线段树有一节课"区间合并" 我是迷茫的 因为并没有见过 然后了解了一下题目 发现以前写过 还是很麻烦的树链剖分 大概是 解决带修改的区间查询"连续问题&q ...

  8. CSDN_帖子__WapPc

    CSDN的帖子,Wap版 和 PC版 网址对应关系: 1. 举个例子: 手机版的网址: http://bbs.csdn.net/wap/topics/391891319 PC版的网址: http:// ...

  9. review06

    使用关键字interface来定义一个接口.接口的定义和类定义很相似,分为接口声明和接口体. 接口体中包含常量的声明(没有变量)和抽象方法两部分.接口中只有抽象方法,没有普通方法.而且接口体中所有的常 ...

  10. hzau 1202 GCD(矩阵快速幂)

    1202: GCD Time Limit: 1 Sec  Memory Limit: 1280 MBSubmit: 201  Solved: 31[Submit][Status][Web Board] ...