1.ミキサーk-近隣アルゴリズム


Google corapを利用して、「web」ブラウザでPythonプログラムを無料でテストして保存することができます.
https://colab.research.google.com/
実習k−最近隣接アルゴリズムを用いて2つの分類を実現する機械学習モデル
(マシンラーニングの作成、魚名の自動提示)
生鮮データソース:https://www.kaggle.com/aungpyaeap/fish-market
  • 単純な魚の長さが30 cmを超えると鯛!
  • if fish_length >=30;
    print("도미")
    しかし、30センチ以上の魚は鯛ばかりではない.クジラとかサメとか
    そのため、機械学習は自分でドミノの骨牌の基準を制定して分類する.
    scatter()関数を使用するには、マットアウトスリットパッケージをインポート(インポート)する
    入力
  • ドミノ骨牌値
  • bream_length = [25.4, 26.3, 26.5, 29.0, 29.0, 29.7, 29.7, 30.0, 30.0, 30.7, 31.0, 31.0, 
                    31.5, 32.0, 32.0, 32.0, 33.0, 33.0, 33.5, 33.5, 34.0, 34.0, 34.5, 35.0, 
                    35.0, 35.0, 35.0, 36.0, 36.0, 37.0, 38.5, 38.5, 39.5, 41.0, 41.0]
    bream_weight = [242.0, 290.0, 340.0, 363.0, 430.0, 450.0, 500.0, 390.0, 450.0, 500.0, 475.0, 500.0, 
                    500.0, 340.0, 600.0, 600.0, 700.0, 700.0, 610.0, 650.0, 575.0, 685.0, 620.0, 680.0, 
                    700.0, 725.0, 720.0, 714.0, 850.0, 1000.0, 920.0, 955.0, 925.0, 975.0, 950.0]
                    
    import matplotlib.pyplot as plt #matplotlib의 pyplot함수를 줄여서 plt로 사용
    
    plt.scatter(bream_length, bream_weight)
    plt.xlabel('length')
    plt.ylabel('weight')
    plt.show()
  • m以上の値と氷魚の値
  • を入力します.
    smelt_length = [9.8, 10.5, 10.6, 11.0, 11.2, 11.3, 11.8, 11.8, 12.0, 12.2, 12.4, 13.0, 14.3, 15.0]
    smelt_weight = [6.7, 7.5, 7.0, 9.7, 9.8, 8.7, 10.0, 9.9, 9.8, 12.2, 13.4, 12.2, 19.7, 19.9]
    
    plt.scatter(bream_length, bream_weight)
    plt.scatter(smelt_length, smelt_weight)
    plt.xlabel('length')
    plt.ylabel('weight')
    plt.show()

    2つのリストを1つに追加
    length = bream_length + smelt_length
    weight = bream_weight + smelt_weight
    print("length:", length)
    print("weight:", weight)
    length: [25.4, 26.3, 26.5, 29.0, 29.0, 29.7, 29.7, 30.0, 30.0, 30.7, 31.0, 31.0, 31.5, 32.0, 32.0, 32.0, 33.0, 33.0, 33.5, 33.5, 34.0, 34.0, 34.5, 35.0, 35.0, 35.0, 35.0, 36.0, 36.0, 37.0, 38.5, 38.5, 39.5, 41.0, 41.0, 9.8, 10.5, 10.6, 11.0, 11.2, 11.3, 11.8, 11.8, 12.0, 12.2, 12.4, 13.0, 14.3, 15.0]
    weight: [242.0, 290.0, 340.0, 363.0, 430.0, 450.0, 500.0, 390.0, 450.0, 500.0, 475.0, 500.0, 500.0, 340.0, 600.0, 600.0, 700.0, 700.0, 610.0, 650.0, 575.0, 685.0, 620.0, 680.0, 700.0, 725.0, 720.0, 714.0, 850.0, 1000.0, 920.0, 955.0, 925.0, 975.0, 950.0, 6.7, 7.5, 7.0, 9.7, 9.8, 8.7, 10.0, 9.9, 9.8, 12.2, 13.4, 12.2, 19.7, 19.9]
    「sikit-lean」(sckit-lean)を使用して、各プロパティのリストを下(2 Dリスト)に垂直にします.

    HOW?
    zip()関数とリストネスト構文を使用します.
    zip:リストされた各リストから要素を取り出して返します.
    for:zip関数を使用してlengthとweightリストから要素を1つずつ取り出し、lとwに割り当てる
    これにより、[l,w]が要素からなるリストが作成されます.
    fish_data = [[l, w] for l, w in zip(length, weight)]
    print(fish_data)
    [[25.4, 242.0], [26.3, 290.0], [26.5, 340.0], [29.0, 363.0], [29.0, 430.0], [29.7, 450.0], [29.7, 500.0], [30.0, 390.0], [30.0, 450.0], [30.7, 500.0], [31.0, 475.0], [31.0, 500.0], [31.5, 500.0], [32.0, 340.0], [32.0, 600.0], [32.0, 600.0], [33.0, 700.0], [33.0, 700.0], [33.5, 610.0], [33.5, 650.0], [34.0, 575.0], [34.0, 685.0], [34.5, 620.0], [35.0, 680.0], [35.0, 700.0], [35.0, 725.0], [35.0, 720.0], [36.0, 714.0], [36.0, 850.0], [37.0, 1000.0], [38.5, 920.0], [38.5, 955.0], [39.5, 925.0], [41.0, 975.0], [41.0, 950.0], [9.8, 6.7], [10.5, 7.5], [10.6, 7.0], [11.0, 9.7], [11.2, 9.8], [11.3, 8.7], [11.8, 10.0], [11.8, 9.9], [12.0, 9.8], [12.2, 12.2], [12.4, 13.4], [13.0, 12.2], [14.3, 19.7], [15.0, 19.9]]
    正しいデータを作成します(マルチメートル=1、ビン魚=0)
    WHY?
    少なくともどの魚が鯛と魚なのかを教えるために、通常2営業日は1、0にしか区別されません.
    fish_target = [1]*35 + [0]*14
    print(fish_target)
    [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    K近隣アルゴリズムの使用
    KNeighborsClassFiferインポートfrom sklearn.neighbors import KNeighborsClassifierインポートしたKNeighborsClassifierクラスをオブジェクトとして作成kn = KNeighborsClassifier()標準データと正しいデータの理解
    fit()メソッドを使用して学習するkn.fit(fish_data, fish_target)score()メソッドを使用して、学習が順調かどうかを検証します.
    1:すべてのデータが当たった
    0.5:半分しか合っていません
    0:どうでもいい
    kn.score(fish_data, fish_target)
    1.0
    1.0、精度100%
    じつよそく
    predicate()メソッドは、新しいデータの正解を予測する
    kn.predict([[30,600]]
    결과값 : array([1])
    1は多メートルと定義され、緑の三角形は多メートルです!鳥肌
    K近傍アルゴリズムは,新しいデータを予測する際に,最近の直線距離にどのようなデータがあるかを調べるだけである.
    短所:データ量が多くてメモリが必要で、時間が長くて、大量のデータに適している
  • fit X,y属性にはすべてのデータが含まれている
  • print(kn._fit_X)
    print(kn._y)
    결과값 : 
    [[  25.4  242. ]
     [  26.3  290. ]
     [  26.5  340. ]
     [  29.   363. ]
     [  29.   430. ]
     [  29.7  450. ]
     [  29.7  500. ]
     [  30.   390. ]
     [  30.   450. ]
     [  30.7  500. ]
     [  31.   475. ]
     [  31.   500. ]
     [  31.5  500. ]
     [  32.   340. ]
     [  32.   600. ]
     [  32.   600. ]
     [  33.   700. ]
     [  33.   700. ]
     [  33.5  610. ]
     [  33.5  650. ]
     [  34.   575. ]
     [  34.   685. ]
     [  34.5  620. ]
     [  35.   680. ]
     [  35.   700. ]
     [  35.   725. ]
     [  35.   720. ]
     [  36.   714. ]
     [  36.   850. ]
     [  37.  1000. ]
     [  38.5  920. ]
     [  38.5  955. ]
     [  39.5  925. ]
     [  41.   975. ]
     [  41.   950. ]
     [   9.8    6.7]
     [  10.5    7.5]
     [  10.6    7. ]
     [  11.     9.7]
     [  11.2    9.8]
     [  11.3    8.7]
     [  11.8   10. ]
     [  11.8    9.9]
     [  12.     9.8]
     [  12.2   12.2]
     [  12.4   13.4]
     [  13.    12.2]
     [  14.3   19.7]
     [  15.    19.9]]
    [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0
     0 0 0 0 0 0 0 0 0 0 0 0]
    つまり.

  • 実はKNNは訓練していません

  • fit()メソッドは、伝達されたすべてのデータを保存します.新しいデータが表示されたら、最近のデータを参照して、多米か氷魚かを区別してください.
    では、最近のいくつかのデータを参考にしてみましょうか.
    既定値は5

  • 49個(全部)を参考にしたら?不正確
  • kn49 = KNeighborsClassifier(n_neighbors=49)
    kn49.fit(fish_data, fish_target)
    kn49.score(fish_data, fish_target)
    
    결과값 : 0.7142857142857143 << 35/49확률임
    では、デフォルト値がどれくらいの場合、1以下に下がるのでしょうか.
    ふごうかく
    kn = KNeighborsClassifier()
    kn.fit(fish_data, fish_target)
    for n in range(5,50):
       kn.n_neighbors = n
       score = kn.score(fish_data, fish_target)
       if score < 1:
         print(n,score)
         break
         
     결과 : 18 0.9795918367346939
    つまり、18から1以下に下がり、17の精度は1!