Pythonマシン学習の底辺にKNNを実現
一、データの導入
pythonが持参するpandsライブラリを使ってデータを導入するのは簡単です。使っているデータは地元のワインセットにダウンロードしたものです。
コードは以下の通りです。
KNNアルゴリズムでは距離を用いるので,正規化は重要なステップであり,データの次元を除去できる。正規化を使って、計量をなくすのも標準化できますが、初心者としては正規化が簡単だと思います。
その中で最大最小値の計算はpythonのnumpyライブラリを用い、pandsが導入したデータはDateFrame形式であり、np.arrayはDateFrame形式をnumpyで計算できるdarray形式に変換するために用いられる。
コードは以下の通りです。
まず、データの値とラベルの値をそれぞれxとyで分けて、乱数のシードラドm_を設定します。stateは、設定しないと運行毎に結果が異なります。test_sizeはテストセットの割合を表します。
ここでは欧氏距離、pow()関数を用いてべき乗を計算します。lengthは属性値の数を指し、直近傍を計算する時に使用します。
テストセットのデータとトレーニングセットの各データの距離を計算して、一番近いk個を選択して、少数で多数の原則に従ってラベルの値を導出します。このうちargsortは、小さいときから大きなインデックス値までを返します。対応するラベルの値を見つけるために。
tip:numpyで衆数を計算する方法
以上のKNNアルゴリズムでテスト集中の各データのラベル値を予測し、result配列に預け入れ、予測結果を実際の値と比較し、正確な予測数と全体の個数の比を計算します。
KNNは機械学習の中で一番簡単なアルゴリズムです。実現するのは比較的簡単ですが、私のような初心者に対しては、やはり長い時間をかけて整えました。
githubにプロジェクトをアップロードしました。https://github.com/chenyi369/KNN。
ここでPythonマシン学習の下層についてKNNを実現する文章を紹介します。Python下層のKNNを実現するために、以前の記事を検索してください。または下記の関連記事を引き続きご覧ください。これからもよろしくお願いします。
pythonが持参するpandsライブラリを使ってデータを導入するのは簡単です。使っているデータは地元のワインセットにダウンロードしたものです。
コードは以下の通りです。
import pandas as pd
def read_xlsx(csv_path):
data = pd.read_csv(csv_path)
print(data)
return data
二、正規化KNNアルゴリズムでは距離を用いるので,正規化は重要なステップであり,データの次元を除去できる。正規化を使って、計量をなくすのも標準化できますが、初心者としては正規化が簡単だと思います。
その中で最大最小値の計算はpythonのnumpyライブラリを用い、pandsが導入したデータはDateFrame形式であり、np.arrayはDateFrame形式をnumpyで計算できるdarray形式に変換するために用いられる。
コードは以下の通りです。
import numpy as np
def MinMaxScaler(data):
col = data.shape[1]
for i in range(0, col-1):
arr = data.iloc[:, i]
arr = np.array(arr) # DataFrame ndarray , numpy
min = np.min(arr)
max = np.max(arr)
arr = (arr-min)/(max-min)
data.iloc[:, i] = arr
return data
三、トレーニングセットとテストセットを分けます。まず、データの値とラベルの値をそれぞれxとyで分けて、乱数のシードラドm_を設定します。stateは、設定しないと運行毎に結果が異なります。test_sizeはテストセットの割合を表します。
def train_test_split(data, test_size=0.2, random_state=None):
col = data.shape[1]
x = data.iloc[:, 0:col-1]
y = data.iloc[:, -1]
x = np.array(x)
y = np.array(y)
# , ,
if random_state:
np.random.seed(random_state)
#
# permutation 0-len(data)
shuffle_indexs = np.random.permutation(len(x))
# 20%
test_size = int(len(x) * test_size)
# 20%
test_indexs = shuffle_indexs[:test_size]
# 80%
train_indexs = shuffle_indexs[test_size:]
#
x_train = x[train_indexs]
y_train = y[train_indexs]
x_test = x[test_indexs]
y_test = y[test_indexs]
#
# print(y_train)
return x_train, x_test, y_train, y_test
四、距離を計算するここでは欧氏距離、pow()関数を用いてべき乗を計算します。lengthは属性値の数を指し、直近傍を計算する時に使用します。
def CountDistance(train,test,length):
distance = 0
for x in range(length):
distance += pow(test[x] - train[x], 2)**0.5
return distance
五、一番近い隣を選ぶテストセットのデータとトレーニングセットの各データの距離を計算して、一番近いk個を選択して、少数で多数の原則に従ってラベルの値を導出します。このうちargsortは、小さいときから大きなインデックス値までを返します。対応するラベルの値を見つけるために。
tip:numpyで衆数を計算する方法
import numpy as np
#bincount(): ,
counts = np.bincount(nums)
#
np.argmax(counts)
少数は多数の原則に従い、衆数を計算し、ラベルの値を返します。
def getNeighbor(x_train,test,y_train,k):
distance = []
#
length = x_train.shape[1]
#
for x in range(x_train.shape[0]):
dist = CountDistance(test, x_train[x], length)
distance.append(dist)
distance = np.array(distance)
#
distanceSort = distance.argsort()
# distance.sort(key= operator.itemgetter(1))
# print(len(distance))
# print(distanceSort[0])
neighbors =[]
for x in range(k):
labels = y_train[distanceSort[x]]
neighbors.append(labels)
# print(labels)
counts = np.bincount(neighbors)
label = np.argmax(counts)
# print(label)
return label
関数の呼び出し時:
getNeighbor(x_train,x_test[0],y_train,3)
六、計算精度以上のKNNアルゴリズムでテスト集中の各データのラベル値を予測し、result配列に預け入れ、予測結果を実際の値と比較し、正確な予測数と全体の個数の比を計算します。
def getAccuracy(x_test,x_train,y_train,y_test):
result = []
k = 3
# arr_label = getNeighbor(x_train, x_test[0], y_train, k)
for x in range(len(x_test)):
arr_label = getNeighbor(x_train, x_test[x], y_train, k)
result.append(arr_label)
correct = 0
for x in range(len(y_test)):
if result[x] == y_test[x]:
correct += 1
# print(correct)
accuracy = (correct / float(len(y_test))) * 100.0
print("Accuracy:", accuracy, "%")
return accuracy
締め括りをつけるKNNは機械学習の中で一番簡単なアルゴリズムです。実現するのは比較的簡単ですが、私のような初心者に対しては、やはり長い時間をかけて整えました。
githubにプロジェクトをアップロードしました。https://github.com/chenyi369/KNN。
ここでPythonマシン学習の下層についてKNNを実現する文章を紹介します。Python下層のKNNを実現するために、以前の記事を検索してください。または下記の関連記事を引き続きご覧ください。これからもよろしくお願いします。