2014-02-07 1 views
5

Как относительный новый пользователь Python, я пытаюсь использовать sklearn RandomForestClassifier. Один пример из инструкции для руководства по yhat является следующее:Что делает y, _ назначение в python/sklearn?

from sklearn.datasets import load_iris 
from sklearn.ensemble import RandomForestClassifier 
import pandas as pd 
import numpy as np 

iris = load_iris() 
df = pd.DataFrame(iris.data, columns=iris.feature_names) 
df['is_train'] = np.random.uniform(0, 1, len(df)) <= .75 
df['species'] = pd.Factor(iris.target, iris.target_names) 
df.head() 

train, test = df[df['is_train']==True], df[df['is_train']==False] 

features = df.columns[:4] 
clf = RandomForestClassifier(n_jobs=2) 
y, _ = pd.factorize(train['species']) # assignment I don't understand 
clf.fit(train[features], y) 

preds = iris.target_names[clf.predict(test[features])] 
pd.crosstab(test['species'], preds, rownames=['actual'], colnames=['preds']) 

Может кто-нибудь объяснить, что у, _ уступка и как она работает. Он не используется явно, но я получаю сообщение об ошибке, если я его оставлю.

+0

Мне нужно больше понимания кода. Разве это просто совпадение, что iris.target и y все совпадают с iris.target_names? Так как factorize() кодирует входное значение в категориальное значение, и нет гарантии, что он кодирует тот же самый способ, который используется как сопоставление от iris.target к iris.target_names. Например, 0 сопоставляется с setosa, но как гарантируется, что factorize() выполняет одно и то же отображение при кодировании значений? Не уверен, понимаете ли вы мой вопрос. Благодаря! – zsong

ответ

8

Вы разложили возвращаемый кортеж на два разных значения: y и _.

_ является условным обозначением «Мне больше не нужно это значение».

Это в основном так же, как:

y = pd.factorize(train['species'])[0] 

с тем исключением, что этот код будет работать для любого индексируемого возвращаемого значения, по крайней мере, 1 элемент, в то время как ваши явно нуждается ровно две детали в возвращаемом значении.

+1

... за исключением того, что '[0]' будет работать, если возвращаемое значение имеет более двух элементов, поэтому использование 'y, _ =' также является проверкой работоспособности на выходе 'pd.factorize'. –

+0

Это, конечно, правильно, это сработало бы, если бы у него было хотя бы 1 элемент. Я добавлю. –

+0

Кто-нибудь знает происхождение соглашения о подчеркивании? – Bach

3

Это значит, что pd.factorize(train['species']) возвращает кортеж/список/генератор/истребитель из двух предметов. В Python вы можете сделать

x, y = [1, 2] 

и теперь x == 1 и y == 2. В вашем случае y становится первым значением и переменной _ второй. Подчеркивание _ часто используется как имя переменной, которое не будет использоваться.

Смежные вопросы