2017-01-21 12 views
1

Вы знаете, как создать модели прогнозирования для Ensemble методов классификаторов, в частности, которые являются R стилем:Как создать прогностическую модель в Python R стиле с использованием нескольких категориальных переменными

ded.fit(formula="X ~ Y + Z**2", data=fed) 

В настоящее время код выглядит примерно так это:

from sklearn.ensemble import RandomForestClassifier 
model = RandomForestClassifier(n_estimators=100, min_samples_leaf=10,  
random_state=1) 
model.fit(x_train, y_train) 

Вопрос: Вы можете спросить, почему мне это нужно?

  1. Мне нужно это, чтобы добавить больше переменных, а не только X и Y Мне нужны Z и P и Q и R.
  2. я должен видеть и эксперимент, как я в R, если добавление экспонента или умножения или деления значения для конкретной увеличивается переменной или уменьшает точность прогнозирования, как показано ниже формулой:

    X ~ Y + Z^2" or "X ~ Y + Z + (P*2) + Q**2

Любые ответы будут высоко оценены. Спасибо заранее.

+0

Scikit-learn не имеет никакого интерфейса в стиле формулы. Вы можете иметь несколько предикторов, включив их в качестве столбцов в свои X-данные. – BrenBarn

+0

Спасибо @BrenBarn Не могли бы вы привести пример, который действительно поможет в том, как включить несколько столбцов, нужно ли нам это делать, разделив на X_Train и Y_Train? –

+1

Есть тонны scikit изучают учебные пособия и вопросы, показывающие, как это сделать. Осмотреться. – BrenBarn

ответ

1

Нечто подобное должно работать:

import pandas as pd 
import numpy as np 
X = pd.DataFrame(np.random.randint(0,100,size=(100, 2)), columns=list('XZ')) 
y = np.random.randint(2,size=100) # labels for binary classification 
X['Z2'] = X.Z**2 # add more features 
print X.head() # note the added feature Z^2 
# X Z Z2 
#0 88 90 8100 
#1 49 63 3969 
#2 27 23 529 
#3 47 71 5041 
#4 21 98 9604 
train_samples = 80 # Samples used for training the models 
X_train = X[:train_samples] 
X_test = X[train_samples:] 
y_train = y[:train_samples] 
y_test = y[train_samples:] 
from sklearn.ensemble import RandomForestClassifier 
from pandas_ml import ConfusionMatrix 
import matplotlib.pyplot as plt 
model = RandomForestClassifier(n_estimators=100, min_samples_leaf=10, random_state=1) 
model.fit(X_train, y_train) 
y_pred = model.predict(X_test) 
#print confusion_matrix(y_test, y_pred) 
cm = ConfusionMatrix(y_test, y_pred) 
print cm 
# Predicted 0 1 __all__ 
# Actual 
# 0   3 4  7 
# 1   4 9  13 
# __all__ 7 13  20 
cm.plot() 
plt.show() 

enter image description here

+0

Я хочу, чтобы столбцы не сливали их в другой, это не тот ответ, который я ищу. –

+1

Лучший ответ Я бы сказал Спасибо –

2

Вот как я хотел бы попробовать сделать это, используя воображаемую панд ДФ с 3 колонки, состоящие из ваших категориальных переменных и один столбец, который является ваша цель {cat1, cat2, cat3, цель}:

predictors =df[["cat1", "cat2", "cat3"]] 
target = df["target"] 

from sklearn.cross_validation import train_test_split 
from sklearn.ensemble import RandomForestClassifier 

'''let sklearn do your training/testing split''' 
pred_train, tar_train, pred_test, tar_test(predictors, target, test_size = .30) 

'''create model with pre-pruning--play with the parameters consulting documentation''' 
numtrees = 50 
classifier=RandomForestClassifier(n_estimators = numtrees,min_samples_leaf = 10, 
            max_leaf_nodes = 25) 
model=classifier.fit(pred_train,tar_train) 
predictions=model.predict(pred_test) 

'''To test the results''' 
import sklearn.metrics 

print '\n********* confusion matrix **********\n' 
print "TRUE NEG FALSE POS" 
print '', sklearn.metrics.confusion_matrix(tar_test,predictions) 
print "FALSE NEG TRUE POS" 

print '\n============ Accuracy =============' 
print sklearn.metrics.accuracy_score(tar_test, predictions) 

enter image description here

enter image description here

Имейте в виду, что я не опытный программист, но этот код работал для меня.