2.パッケージkNNアルゴリズムのデータ分割
3834 ワード
トレーニングデータセットとテストデータセット
データのセットを手に入れると、通常、トレーニングデータセットとテストデータセットの2つの部分にデータを分割する必要があります.訓練データセットは数学モデルの構築に用いられ,試験データセットは我々が構築したモデルの精度を検証するために用いられる.我々のkNNアルゴリズムをカプセル化するには,まずデータの自動分割を実現しなければならない.コードは次のように実装されます.
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
このコードについて説明します.最初に、使用するnumpyライブラリをインポートします.ステップ2 train_の定義test_split関数.関数には、次の4つの戻り値があります.
3つ目のステップは、断言を追加することです.私たちが転送すべきデータXとyは実際に処理されたデータです.次のようになります.
raw_data_X = [[2.393533211, 2.331273381],
[3.110073483, 1.781539638],
[1.343808831, 3.368360954],
[3.882294042, 2.979179110],
[2.280362439, 2.866990263],
[7.423436942, 4.696522875],
[5.745051997, 3.033989803],
[9.172168622, 2.511101045],
[7.792783481, 3.424088941],
[5.839820817, 2.791637231]
]
raw_data_y = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1]
私たちが入力したデータを理解してから、この2つの断言を言います.最初の断言は、入力したXの行数がyの要素の個数と同じで、入力したデータが有効であることを保証することを要求します.第二句断言要求test_radioは0-1の間にあります.
4つ目は、入力されたデータを混乱させることです.処理されたデータを私たちの手に送るべきで、データの中のyは通常一定の法則に従ってソートされています.例えば前節で用いた乳がんデータは,前5個が0,後5個が1であった.numpyのpermutation関数を使用して、インデックスを乱します.
第5歩は分割を実現することであり,この部分のコードは簡単明瞭で説明しない.最後に効果を見てみましょう.効果を直感的に感じるためにsklearnの古典的なアヤメデータセットを導入した.
コード全体は次のように実現されます.
from sklearn import datasets
from playKNN import model_selection
iris = datasets.load_iris() # sklearn
X = iris.data
y = iris.target
print(X.shape)
print(y.shape)
print(y[:10])
X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y)
print(X_train.shape)
print(y_train.shape)
print(X_test.shape)
print(y_test.shape)
print(y_test[:10])
#
(150, 4)
(150,)
[0 0 0 0 0 0 0 0 0 0]
(120, 4)
(120,)
(30, 4)
(30,)
[2 1 2 2 1 0 0 1 2 1]
まずsklearnからdatasetsをインポートし、私たちのアヤメのデータセットを保存します.そして私たちのデータをplayKNNというパッケージに分割し、パッケージのmodelを導入しました.selection. Datasetsのデータベースをインポートするにはloadを使用します.pycharmは、どのライブラリをインポートする必要があるかを示すメッセージを飛び出し、load_を選択します.iris. numpyのshapeで私たちのデータを見ると、アヤメのデータセットXの150*4の行列がわかります.yは150要素のベクトルです.私たちはyの最初の10の根拠を見て、[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]を見て、私たちの推測を証明して、処理したデータは通常一定の規則に従ってソートします!その後、私たちがカプセル化したモデルを使用します.selection,X_を得るtrain,y_train,X_test,y_test.それぞれshapeメソッドで,(120,4),(120,),(30,4),(30,)を調べた.最後にy_を見るtestの上位10件の情報,[21 2 1 0 0 1 2 1 1]アヤメのデータセットは0,1,2の3つの状態値を共有し,3つの品種を表すアヤメはy_に現れた.testの最初の10の情報では,我々のデータ分割が有効であることを示している.