2016-05-06 5 views
0

と一致していません。とValueError:配列の長さは、私がkaggleのようなコンテストのために練習していると私はXGBoostを使用しようとしているとパンダとnumpyのようなpythonのサードパーティのライブラリを持つ自分が使い慣れた取得しようとしていますインデックス長

私は、サンタンデール顧客満足度の分類と呼ばれるこの特定の競争からスクリプトを見直してきたと私は彼らの実験するために、異なるフォークスクリプトを変更されています。ここで

は私がXGBoostを実装しようとしています、それを通して1つの変更したスクリプトです:ここでは

import pandas as pd 
from sklearn import cross_validation as cv 
import xgboost as xgb 

df_train = pd.read_csv("/Users/pavan7vasan/Desktop/Machine_Learning/Project Datasets/Santander_Customer_Satisfaction/train.csv") 
df_test = pd.read_csv("/Users/pavan7vasan/Desktop/Machine_Learning/Project Datasets/Santander_Customer_Satisfaction/test.csv") 

df_train = df_train.replace(-999999,2) 

id_test = df_test['ID'] 
y_train = df_train['TARGET'].values 
X_train = df_train.drop(['ID','TARGET'], axis=1).values 
X_test = df_test.drop(['ID'], axis=1).values 

X_train, X_test, y_train, y_test = cv.train_test_split(X_train, y_train, random_state=1301, test_size=0.4) 

clf = xgb.XGBClassifier(objective='binary:logistic', 
       missing=9999999999, 
       max_depth = 7, 
       n_estimators=200, 
       learning_rate=0.1, 
       nthread=4, 
       subsample=1.0, 
       colsample_bytree=0.5, 
       min_child_weight = 3, 
       reg_alpha=0.01, 
       seed=7) 

clf.fit(X_train, y_train, early_stopping_rounds=50, eval_metric="auc", eval_set=[(X_train, y_train), (X_test, y_test)]) 
y_pred = clf.predict_proba(X_test) 

print("Cross validating and checking the score...") 
scores = cv.cross_val_score(clf, X_train, y_train) 
''' 
test = [] 
result = [] 
for each in id_test: 
    test.append(each) 
for each in y_pred[:,1]: 
    result.append(each) 

print len(test) 
print len(result) 
''' 
submission = pd.DataFrame({"ID":id_test, "TARGET":y_pred[:,1]}) 
#submission = pd.DataFrame({"ID":test, "TARGET":result}) 
submission.to_csv("submission_XGB_Pavan.csv", index=False) 

は、スタックトレースです:

Traceback (most recent call last): 
    File "/Users/pavan7vasan/Documents/workspace/Machine_Learning_Project/Kaggle/XG_Boost.py", line 45, in <module> 
submission = pd.DataFrame({"ID":id_test, "TARGET":y_pred[:,1]}) 
    File "/anaconda/lib/python2.7/site-packages/pandas/core/frame.py", line 214, in __init__ 
mgr = self._init_dict(data, index, columns, dtype=dtype) 
    File "/anaconda/lib/python2.7/site-packages/pandas/core/frame.py", line 341, in _init_dict 
dtype=dtype) 
    File "/anaconda/lib/python2.7/site-packages/pandas/core/frame.py", line 4798, in _arrays_to_mgr 
index = extract_index(arrays) 
    File "/anaconda/lib/python2.7/site-packages/pandas/core/frame.py", line 4856, in extract_index 
raise ValueError(msg) 
ValueError: array length 30408 does not match index length 75818 

私は、さまざまなソリューションのための私の検索に基づいて解決策を試してみましたが、私は間違いが何であるか把握することができません。私が間違っているのは何ですか?私は、問題はあなたが言及した@maxymooとして二回X_testを定義することである

+0

あなたのトレースバックはどこにありますか?誰が(例えば、外部CSVデータなし)を実行することができ、最小限のスクリプトを提供し、我々はあなたに、より良い – tdihp

+0

あなたはX_test'は二回、これが問題 – maxymoo

+0

@tdihpを引き起こしている可能性があります '定義しているのを助けることができる:ああ、私は完全に忘れてしまいました!今 –

答えて

0

を教えてください。まず、

X_test = df_test.drop(['ID'], axis=1).values 

として定義され、あなたがいることを再定義:

X_train, X_test, y_train, y_test = cv.train_test_split(X_train, y_train, random_state=1301, test_size=0.4) 

X_test0.4*len(X_train)に等しい大きさを有することを意味します。そして、後:

y_pred = clf.predict_proba(X_test) 

あなたはX_trainのその部分のための予測を持っている、あなたは、元のX_testの長さを有していると初期id_testを持つデータフレームを作成しようとしています。
あなたが理由のためにX_trainX_test初期のtrain_test_splitX_fitX_evalを使用して隠すことができなかったあなたのcross_validationまた、あなたは正しい答えを得ることはありませうか、cvプライベート/パブリックスコアと不正確になることを意味するX_train異なっています。

+0

おかげアントンそれを更新する、リマインダーをありがとう、私は問題を解決することができました –

関連する問題