ValueError: измерение данных запроса должно соответствовать измерению данных обучения - Python SciPy ValueErrror - PullRequest
0 голосов
/ 10 октября 2019

Я пытаюсь заставить компьютер заранее угадать, что игрок выберет, в зависимости от того, что игрок выбрал в предыдущих попытках:

import random
from sklearn.datasets import load_iris 
from sklearn.neighbors import KNeighborsClassifier 
import numpy as np 
from sklearn.model_selection import train_test_split

iris_dataset=load_iris()

while True:
    print()
    print("Do you choose rock, paper or scissors?")
    guessArray = []
    resultArray = []
    guess = str(input())
    guess = guess.lower()
    guessNum = 0
    if guess == 'rock': 
        guessArray.append(1)
    elif guess == 'paper':
        guessArray.append(2)
    elif guess == 'scissors':
        guessArray.append(3)
    else:
        guessArray.append(4)
    if guess == 'rock': 
        guessNum = 1
    elif guess == 'paper':
        guessNum = 2
    elif guess == 'scissors':
        guessNum = 3
    else:
        guessNum = 4
    choices = ['rock', 'paper', 'scissors']
    print('You guessed', guess)
    X_train, X_test, y_train, y_test = train_test_split(iris_dataset["data"], iris_dataset["target"], random_state=0)
    kn = KNeighborsClassifier(n_neighbors=1) 
    kn.fit(X_train, y_train)
    x_new = np.array([guessArray])
    prediction = kn.predict(x_new)
    computer_guess = format(prediction)
    print('Computer guess', computer_guess)
    if guess in choices:
        if guessNum == computer_guess:
            result = 'Tie'
        elif guessNum == 1:
            if computer_guess == 3:
                result = 'Win'
            elif computer_guess == 2:
                result = 'Loose'
        elif guess == 2:
            if computer_guess == 2:
                result = 'Loose'
            elif computer_guess == 1:
                result = 'Win'
        elif guess == 3:
            if computer_guess == 2:
                result = 'Win'
            elif computer_guess == 1:
                result = 'Loose'
    else: 
        result = 'Invalid'

    resultArray.append(result)
    #Print result



    #print("Predicted target value: {}\n".format(prediction)) 
    #print("Predicted feature name: {}\n".format
    #    (iris_dataset["target_names"][prediction])) 
    #print("Test score: {:.2f}".format(kn.score(X_test, y_test))

Код работает нормально и даже печатает все нормально доСтрока «предсказание = kn.predict (x_new)», а затем все идет наперекосяк. Я понял, что мне нужно как-то изменить форму переменной x_new, но так как я только начал программировать на python сегодня и никогда не работал с любым машинным обучением, кроме как с базовыми вещами с .net и c #.

Traceback (most recent call last):
  File "rockpaperscissors.py", line 40, in <module>
    prediction = kn.predict(x_new)
  File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\sklearn\neighbors\classification.py", line 149, in predict
    neigh_dist, neigh_ind = self.kneighbors(X)
  File "C:\Users\viktor.landstrom.LEARNET\AppData\Local\Programs\Python\Python37-32\lib\site-packages\sklearn\neighbors\base.py", line 454, in kneighbors
    for s in gen_even_slices(X.shape[0], n_jobs)
  File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\joblib\parallel.py", line 1003, in __call__
    if self.dispatch_one_batch(iterator):
  File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\joblib\parallel.py", line 834, in dispatch_one_batch
    self._dispatch(tasks)
  File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\joblib\parallel.py", line 753, in _dispatch
    job = self._backend.apply_async(batch, callback=cb)
  File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\joblib\_parallel_backends.py", line 201, in apply_async
    result = ImmediateResult(func)
  File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\joblib\_parallel_backends.py", line 582, in __init__
    self.results = batch()
  File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\joblib\parallel.py", line 256, in __call__
    for func, args, kwargs in self.items]
  File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\joblib\parallel.py", line 256, in <listcomp>
    for func, args, kwargs in self.items]
  File "C:\Users\user\AppData\Local\Programs\Python\Python37-32\lib\site-packages\sklearn\neighbors\base.py", line 291, in _tree_query_parallel_helper
    return tree.query(data, n_neighbors, return_distance)
  File "sklearn\neighbors\binary_tree.pxi", line 1317, in sklearn.neighbors.kd_tree.BinaryTree.query
ValueError: query data dimension must match training data dimension
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...