Что передать в clf.predict ()?

B.Malysz спросил: 13 июня 2018 в 05:22 в: python-3.x

В последнее время я начал играть с Деревьями принятия решений, и я хотел обучить свою собственную простую модель некоторым производственным данным. Я хотел использовать эту модель, чтобы предсказать некоторые дополнительные данные, чтобы понять, как это работает, но потом я застрял. Как только ваша модель будет обучена, как вы передаете данные для прогнозирования ()?

http://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html

Состояние документов: clf.predict (X)

Параметры: X: массивная или разреженная матрица формы = [n_samples, n_features]

Но при попытке передать np .array, np.ndarray, list, tuple или DataFrame, это просто порождает ошибку. Можете ли вы помочь мне понять, почему?

Код ниже:

from IPython.core.display import display, HTML
display(HTML("<style>.container { width:100% !important; }</style>"))import graphviz
import pandas as pd
import numpy as np
import random
from sklearn import treepd.options.display.max_seq_items=5000
pd.options.display.max_rows=20
pd.options.display.max_columns=150lenght = 50000miles_commuting = [random.choice([2,3,4,5,7,10,20,25,30]) for x in range(lenght)]
salary = [random.choice([1300,1600,1800,1900,2300,2500,2700,3300,4000]) for x in range(lenght)]
full_time = [random.choice([1,0,1,1,0,1]) for x in range(lenght)]DataFrame = pd.DataFrame({'CommuteInMiles':miles_commuting,'Salary':salary,'FullTimeEmployee':full_time})DataFrame['Moving'] = np.where((DataFrame.CommuteInMiles > 20) & (DataFrame.Salary > 2000) & (DataFrame.FullTimeEmployee == 1),1,0)
DataFrame['TargetLabel'] = np.where((DataFrame.Moving == 1),'Considering move','Not moving')target = DataFrame.loc[:,'Moving']
data = DataFrame.loc[:,['CommuteInMiles','Salary','FullTimeEmployee']]
target_names = DataFrame.TargetLabel
features = data.columns.valuesclf = tree.DecisionTreeClassifier()
clf = clf.fit(data, target)clf.predict(?????) #### <===== What should go here?clf.predict([30,4000,1])

ValueError: ожидаемый 2D-массив, получивший 1D-массив: array = [3.e + 01 4.e + 03 1.e + 00]. Измените свои данные либо с помощью array.reshape (-1, 1), если у ваших данных есть одна функция или array.reshape (1, -1), если она содержит один образец .

clf.predict(np.array(30,4000,1))

ValueError: приняты только 2 аргумента, не связанных с ключевыми словами

1 ответ

Vivek Kumar ответил: 16 июня 2018 в 05:45

Где ваши "макетные данные", которые вы хотите предсказать?

Ваши данные должны иметь одинаковую форму, которую вы использовали при вызове fit(). Из приведенного выше кода я вижу, что ваш X имеет три столбца ['CommuteInMiles','Salary','FullTimeEmployee']. Вы должны иметь эти много столбцов в ваших данных прогнозирования, количество строк может быть произвольным.

Теперь, когда вы делаете

clf.predict([30,4000,1])

Модель не может понимаете, что это столбцы одной строки или данные разных строк.

Итак, вам нужно преобразовать это в 2-й массив, где внутренний массив представляет одну строку.

Сделайте это:

clf.predict([[30,4000,1]])     #<== Observe the two square brackets

У вас может быть предсказано несколько строк, каждый во внутреннем списке. Что-то вроде этого:

X_test = [[30,4000,1],
          [35,15000,0],
          [40,2000,1],]
clf.predict(X_test)

Теперь, что касается вашей последней ошибки clf.predict(np.array(30,4000,1)), это не имеет ничего общего с predict(). Вы используете неправильный код np.array().

Согласно документации, подпись np.array:

(object, dtype=None, copy=True, order='K', subok=False, ndmin=0)

Оставляя первый (object), все остальные являются аргументами ключевого слова, поэтому их необходимо использовать как таковые. Но когда вы это делаете: np.array(30,4000,1), каждое значение рассматривается как вход для отдельного параметра здесь: object=30, dtype=4000, copy=1. Это недопустимо и, следовательно, ошибка. Если вы хотите сделать массив numpy из списка, вам нужно передать список.

Нравится это: np.array([30,4000,1]) Теперь это будет считаться правильным в качестве ввода для object param.

Дополнительное видео по вопросу: Что передать в clf.predict ()?

Classification using Pandas and Scikit-Learn

Logistic Regression Machine Learning Method Using Scikit Learn and Pandas Python - Tutorial 31

How to evaluate a classifier in scikit-learn