zoukankan      html  css  js  c++  java
  • 【笔记】初探KNN算法(3)

    KNN算法(3)

    测试算法的目的就是为了帮助我们选择一个更好的模型

    训练数据集,测试数据集方面

    一般来说,我们训练得到的模型直接在真实的环境中使用
    这就导致了一些问题
    如果模型很差,未经改进就应用在现实环境下,那这样得到的预测结果必然是不好的,而且在真实环境中,是难以拿到真实的label(输出结果)的

    因此,很明显,训练和测试同步进行是不恰当的,应该进行训练和测试数据分离,通过测试数据直接判断模型的好坏,在模型进入真实的环境中改进模型,不断的优化改进模型

    先前的计算是将全部的X都当做了测试数据集

    我们不能直接对其取前多少数据
    因为在类别数组中,是已经排好序的数组,如果按照前多少多少来切,出来的肯定是不对的

    因此我们只需要将其打乱顺序,再进行前多少多少的切片就可以了,但是由于X和y是分离的情况,是不可以分别对X和y进行随机化的,但是我们可以对索引进行乱序处理从而实现随机化
    shuffle_indexes = np.random.permutation(len(X))

    然后我们指定一下测试数据集的比例,设百分之20是测试数据集,因为有可能得到浮点数,因此有int来强制转换成整形
    teat_ratio = 0.2
    teat_size = int(len(X) * teat_ratio)

    设前20%是测试数据集,后80%是训练数据集,当然,这是可以更改的

    这样我们就完成了对训练数据集和测试数据集的分离

    我们可以将其写入model_selection.py中

      import numpy as np
    
      def train_test_split(X, y, test_ratio=0.2, seed=None):
          """將数据X和y按照test_ratio分割成X_train, X_test, y_train, y_test"""
    
          assert X.shape[0] == y.shape[0], \
              "the size of X must be equal to the size of y"
          assert 0.0 <= test_ratio <= 1.0, \
              "test_ration must be valid"
    
          if seed:
              np.random.seed(seed)
    
          shuffled_indexes = np.random.permutation(len(X))
    
          test_size = int(len(X) * test_ratio)
          test_indexes = shuffled_indexes[:test_size]
          train_indexes = shuffled_indexes[test_size:]
    
          X_train = X[train_indexes]
          y_train = y[train_indexes]
    
          X_test = X[test_indexes]
          y_test = y[test_indexes]
    
          return X_train, X_test, y_train, y_test
    

    我们可以尝试使用使用自己的算法

    对于求解预测准确率
    只要将预测和测试进行比较,得出相同的数据个数,然后除以测试数据即可

    sklearn中的train_test_split
    train_test_split(X,y,test_size=0.2)
    注意的是,不写test_size的话,默认值为0.2

    如果我们想复现之前进行的拆分,那么我们就要传入一个随机的种子random_state
    train_test_split(X,y,test_size=0.2,random_state=666)

    您能读到这儿,我呢是发自真心的感谢您,若要转载,还望请您带上链接
  • 相关阅读:
    footer点击添加active class
    css背景图与html插入img的区别
    js实现游戏转盘抽奖
    gulp压缩css和js
    前后端分离中,gulp实现头尾等公共页面的复用 前言
    js 输入框只能输入 1-7 的数字
    java 环境变量配置
    两日期相减得到天数
    jQuery如何追加tr到table中 添加到头或者尾
    json 添加 和删除两种方法
  • 原文地址:https://www.cnblogs.com/jokingremarks/p/14274614.html
Copyright © 2011-2022 走看看