pythonでK近傍法を実行する際に、データを標準化すると、エラーとなり苦慮しております。
競馬関連情報を用いて、K近傍法の勉強をさせていただいています。
# -*- coding: utf-8 -*- import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn import datasets from sklearn.model_selection import LeaveOneOut from sklearn.metrics import accuracy_score from sklearn.neighbors import KNeighborsClassifier from sklearn.preprocessing import StandardScaler from sklearn.preprocessing import MinMaxScaler ############## #訓練データ jockey = pd.read_csv("jockey_2.csv" , sep=",") # 標準化 sc = StandardScaler() jockeystd = sc.fit_transform(jockey) print jockeystd ############### # 特徴データとラベルデータを取り出す jockey_except_arrival = jockey.drop("arrival", axis=1) features = jockey_except_arrival.as_matrix() targets = jockey['arrival'].as_matrix() predicted_labels = [] loo = LeaveOneOut() for train, test in loo.split(features): train_data = features[train] target_data = targets[train] model = KNeighborsClassifier(n_neighbors=1) model.fit(train_data, target_data) predicted_label = model.predict(features[test]) predicted_labels.append(predicted_label) score = accuracy_score(targets, predicted_labels) print(score) model = KNeighborsClassifier(n_neighbors=1) model.fit(features, targets) arrival, = model.predict([[3,8,2]]) print(arrival)
jockey_2.csvの内容は、以下のとおりでございます。
weather race_num course arrival 2 11 2 1 2 12 2 1 4 10 1 0 4 8 1 0 4 6 2 1 4 5 1 0 4 4 1 0
上記のソースコードを実行しますと、以下のような結果になります。
[[-1.58113883 1.0422125 1.15470054 1.15470054]
[-1.58113883 1.38961667 1.15470054 1.15470054]
[ 0.63245553 0.69480833 -0.8660254 -0.8660254 ]
[ 0.63245553 0. -0.8660254 -0.8660254 ]
[ 0.63245553 -0.69480833 1.15470054 1.15470054]
[ 0.63245553 -1.0422125 -0.8660254 -0.8660254 ]
[ 0.63245553 -1.38961667 -0.8660254 -0.8660254 ]]
0.857142857143
0
データを標準化しておりませんので、うまく動きます。
さて、
ここから、ステップアップしまして、上記にございます、標準化された値を用いて、ソースコードを動かしたいのですが、うまく出来ません。
下記が、標準化するために上記のソースコードから改変した箇所でございます。
# 特徴データとラベルデータを取り出す jockey_except_arrival = jockeystd.drop("arrival", axis=1) features = jockey_except_arrival.as_matrix() targets = jockeystd['arrival'].as_matrix()
このソースコードを実行しますと、以下のような、標準化された値と併せて、エラーコードが現れます。
[[-1.58113883 1.0422125 1.15470054 1.15470054] [-1.58113883 1.38961667 1.15470054 1.15470054] [ 0.63245553 0.69480833 -0.8660254 -0.8660254 ] [ 0.63245553 0. -0.8660254 -0.8660254 ] [ 0.63245553 -0.69480833 1.15470054 1.15470054] [ 0.63245553 -1.0422125 -0.8660254 -0.8660254 ] [ 0.63245553 -1.38961667 -0.8660254 -0.8660254 ]] Traceback (most recent call last): File "C:\Users\satoru\satoru_system_2.7\jockey_record\jockey_test\teisyutu_k-test-hatten.py", line 27, in <module> jockey_except_arrival = jockeystd.drop("arrival", axis=1) AttributeError: 'numpy.ndarray' object has no attribute 'drop'
標準化された値の右端が、目的変数になっておりますが、1.15470054が 1、-0.8660254 が 0と1と0ではなくなっております。
いろいろ試しましたが、うまく出来ませんでした。
標準化された数値を用いて、K近傍法を動かせるソースコードのご教示をよろしくお願いいたします。
併せまして、テストデータを、一回ずつではなく、
例えば、下記のようなCSVファイルを用いて、一回の入力で、複数のテストデータを入力可能な方法も御教示いただけますと幸いでございます。
weather race_num course arrival 2 6 2 2 12 7 4 5 1 4 7 5 4 6 2 7 7 2 4 4 1
当たり前ではございますが、一番右端の目的変数を空欄にしております。こちらもいろいろ試しましたが、うまく出来ませんでした。
大きく、2つの質問事項でございます。
先輩方の御教示、よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー