乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      kNN(上)

       印度阿三17 2019-11-09

      本篇文章是機(jī)器學(xué)習(xí)小組第一周kNN學(xué)習(xí)的總結(jié),主要參考資料為:

      機(jī)器學(xué)習(xí)的敲門磚:kNN算法(上)

      https://mp.weixin.qq.com/s?__biz=MzUyMjI4MzE0MQ==&mid=2247484679&idx=1&sn=aec5259ee503b9b127b79e2a9661205d&chksm=f9cf74edceb8fdfb43e5dcd3279347e99fa6fb7523de2aaf301418eda6b4b14e17c24d671cd8&scene=21#wechat_redirect

      機(jī)器學(xué)習(xí)的敲門磚:kNN算法(中)

      https://mp.weixin.qq.com/s/vvCM0vWH5kmRfrRWxqXT8Q

      ?

      kNN算法的應(yīng)用場景

      kNN:k-NearestNeighbor,即尋找離樣本最近的k個(gè)鄰居。尋找這k個(gè)鄰居的目的,是認(rèn)為可以通過最相近的k個(gè)鄰居中出現(xiàn)次數(shù)最多的標(biāo)簽來作為樣本自身的標(biāo)簽。因?yàn)閗個(gè)鄰居本身存在多個(gè)分類,所以kNN不僅是一個(gè)分類算法,而且是一個(gè)天生的多分類算法。

      kNN算法的原理

      kNN算法的原理如下:

      ?

      kNN算法的使用(sklearn)

       1 from sklearn import datasets
       2 from sklearn.model_selection import train_test_split, GridSearchCV
       3 from sklearn.neighbors import KNeighborsClassifier
       4 import numpy as np
       5 
       6 iris = datasets.load_iris()
       7 X = iris.data
       8 y = iris.target
       9 print(X.size, y.size)
      10 
      11 # random_state是一個(gè)seed;也可以設(shè)置test_size=0.3,隨機(jī)70%訓(xùn)練,30%測試
      12 # 千萬注意不要寫錯(cuò)了返回值
      13 X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=4798)
      14 kNN_clf = KNeighborsClassifier(n_neighbors=3)
      15 kNN_clf.fit(X_train, y_train)
      16 
      17 """
      18 這部分的代碼主要用來做預(yù)測以及計(jì)算準(zhǔn)確率。
      19 計(jì)算準(zhǔn)確率的邏輯也很簡單,就是判斷預(yù)測和實(shí)際值有多少是相等的。
      20 如果相等則算預(yù)測正確,否則預(yù)測失敗。
      21 """
      22 correct = np.count_nonzero((kNN_clf.predict(X_test) == y_test) == True)
      23 print("Accuracy is:%.3f" % (correct / len(X_test)))

      ?

      kNN算法學(xué)習(xí)收獲

      • 訓(xùn)練樣本和測試樣本數(shù)據(jù)的組織

      當(dāng)我們按照一定比例將訓(xùn)練集和測試集拆分后,得到的數(shù)據(jù)集的結(jié)果有可能是順序的。在《機(jī)器學(xué)習(xí)的敲門磚:kNN算法(中)》中提到了兩種方式來打散數(shù)據(jù)集.

        • 通過numpy的concatenate函數(shù)將X,y合并為矩陣并進(jìn)行shuffle,再將shuffle后的數(shù)據(jù)按比例切分.
      def train_test_split_by_concatenate(X, y, split_ratio):
          '''
          將X,y合并為矩陣并進(jìn)行shuffle,再將shuffle后的數(shù)據(jù)按比例切分為測試集和訓(xùn)練集
          :param X:特征數(shù)據(jù)
          :param y:標(biāo)簽數(shù)據(jù)
          :param split_ratio:數(shù)據(jù)切分比例
          :return:特征訓(xùn)練數(shù)據(jù)集,特征測試數(shù)據(jù)集,標(biāo)簽訓(xùn)練數(shù)據(jù)集,便簽測試數(shù)據(jù)集
          '''
          tempConcat = np.concatenate((X, y.reshape(-1, 1)), axis=1)
          np.random.shuffle(tempConcat)
          shuffle_X, shuffle_y = np.split(tempConcat, [4], axis=1)
          test_size = int(len(X) * split_ratio)
          X_train = shuffle_X[test_size:]
          y_train = shuffle_y[test_size:]
          X_test = shuffle_X[:test_size]
          y_test = shuffle_y[:test_size]
          return X_train, X_test, y_train, y_test
        • 通過numpy.random.permutation方法得到一個(gè)隨機(jī)索引的數(shù)組(< len(X)),通過對該數(shù)組按比例切分得到對應(yīng)的索引,根據(jù)索引找到X,y相應(yīng)的數(shù)據(jù).
      def train_test_split_by_shuffle_index(X, y, split_ratio):
          '''
          生成一個(gè)隨機(jī)數(shù)數(shù)組(隨機(jī)數(shù)小于特征數(shù)據(jù)長度),通過對該數(shù)組按比例切分得到對應(yīng)的索引,根據(jù)索引找到X,y相應(yīng)的數(shù)據(jù)
          :param X:特征數(shù)據(jù)
          :param y:標(biāo)簽數(shù)據(jù)
          :param split_ratio:數(shù)據(jù)切分比例
          :return:特征訓(xùn)練數(shù)據(jù)集,特征測試數(shù)據(jù)集,標(biāo)簽訓(xùn)練數(shù)據(jù)集,便簽測試數(shù)據(jù)集
          '''
          shuffle_index = np.random.permutation(len(X))
          test_size = int(len(X) * split_ratio)
          test_index = shuffle_index[:test_size]
          train_index = shuffle_index[test_size:]
          X_train = X[train_index]
          X_test = X[test_index]
          y_train = y[train_index]
          y_test = y[test_index]
          return X_train, X_test, y_train, y_test

      數(shù)據(jù)集打散的方式可以應(yīng)用到更多的場景。

      超參數(shù)和模型參數(shù)的理解以及GridSearch的使用

      超參數(shù):類似于sklearn對kNN算法的封裝,k是算法需要傳入的參數(shù)。這種參數(shù)被稱為超參數(shù)。類似最近在學(xué)習(xí)的SparkALS,可以通過指定rank參數(shù)、maxIter參數(shù)的多個(gè)值來獲得不同的ALS模型,根據(jù)測試集在不同模型上的RMSE結(jié)果來選擇最好的模型。

      sklearn中通過GridSearch來實(shí)現(xiàn)多個(gè)超參數(shù)的網(wǎng)格搜索。

      
      
      from sklearn.model_selection import train_test_split, GridSearchCV
      from sklearn.neighbors import KNeighborsClassifier

      # 首先是一個(gè)數(shù)組;數(shù)組的每個(gè)元素是一個(gè)字典。即{"weights": ["uniform"], "n_neighbors": [i for i in range(1, 11)]} # 是一個(gè)字典 param_search = [ {"weights": ["uniform"], "n_neighbors": [i for i in range(1, 11)] }, {"weights": ["distance"], "n_neighbors": [i for i in range(1, 11)], "p": [i for i in range(1, 6)] } ]
      knn_clf = KNeighborsClassifier()

      grid_search = GridSearchCV(kNN_clf, param_search)
      best_kNN_clf = grid_search.estimator

      '''
      輸出:
      KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',
      metric_params=None, n_jobs=None, n_neighbors=5, p=2,
      weights='uniform')
      '''

      ?

      來源:https://www./content-4-554401.html

        本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多