🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

7703閲覧

KFoldでのTypeError: __init__() got multiple values for argument 'n_splits'の解決策

退会済みユーザー

退会済みユーザー

総合スコア0

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/09/16 09:45

編集2019/09/16 12:00

質問内容

mainのソースコードでの

# パラメータ ntrain = kdd_train.shape[0] #125973 ntest = kdd_test.shape[0] #22544 SEED = 0 NFOLDS = 1024 # 1024分割 kf = KFold(ntrain, n_splits=NFOLDS, random_state=SEED)

で以下のエラーメッセージが表示されます.
データ量の多さが原因なのかなと考えているのですが
詳しい方,解決策を教えていただきたいです.
kaggleのstackingのチュートリアルを参考にしています.

発生している問題・エラーメッセージ

Traceback (most recent call last): File "ensemble_learning.py", line 84, in <module> kf = KFold(ntrain, n_splits=NFOLDS, random_state=SEED) TypeError: __init__() got multiple values for argument 'n_splits'

mainのソースコード

import os import sys #モジュール検索パスを追加 sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/../script') #モジュール検索パス対象モジュール群 from kdd_load_2classes import * from dataset_class import * import pandas as pd import numpy as np import re import sklearn import xgboost as xgb # 勾配ブースティング import seaborn as sns # オシャレなグラフ import matplotlib.pyplot as plt import plotly.offline as py py.init_notebook_mode(connected=True) import plotly.graph_objs as go import plotly.tools as tls import warnings warnings.filterwarnings('ignore') # Going to use these 5 base models for the stacking from sklearn.ensemble import (RandomForestClassifier, AdaBoostClassifier, GradientBoostingClassifier, ExtraTreesClassifier) from sklearn.svm import SVC from sklearn.model_selection import KFold # ################################## # #Load data and create Data loaders # ################################## def load_data(): #"kdd_load_2classes.py"からTrain,Testデータを取得 print('### Loading Data.....###') kdd_label, kdd_data, kdd_label_test, kdd_data_test =kdd_load() #"dataset_class.py"を使用してデータを格納 #各クラスの一定割合をラベル付きデータとする dataset = Dataset(train=(kdd_data, kdd_label), test=(kdd_data_test, kdd_label_test), num_classes = 2,percent = 1.0) print("#labeled----------------: {}".format(dataset.get_num_labeled_data())) print("#unlabeled--------------: {}".format(dataset.get_num_unlabeled_data())) images_labeled, labels = dataset.get_labeled_data() #images_unlabeled, unlabels = dataset.get_unlabeled_data() #unlabels = np.full(len(unlabels), -1) #ラベル無しデータに関してはラベルを-1とする images_test , labels_test = dataset.get_test_data() total = 0 print("#labeledDataCount--------------") #ラベル0,1,それぞれの枚数を表示 for i in range(2): print("{}:{}".format(i,np.sum(labels == i))) total += np.sum(labels == i) print('### Finish Loading ###') return images_labeled, labels, images_test, labels_test #train,testデータの取得 kdd_train, kdd_labeled_train, kdd_test, kdd_labeled_test = load_data() # ##################################### # #Ensembling & Stacking models # ##################################### #スタッキングアンサンブルモデルを作成する ###Helper via Python Classes ''' Pythonで先に学習・予測するためのクラスを定義しておく. ''' # パラメータ ntrain = kdd_train.shape[0] #125973 ntest = kdd_test.shape[0] #22544 SEED = 0 NFOLDS = 1024 # 1024分割 kf = KFold(ntrain, n_splits=NFOLDS, random_state=SEED) # Sklearn分類機を拡張 class SklearnHelper(object): def __init__(self, clf, seed=0, params=None): params['random_state'] = seed self.clf = clf(**params) def train(self, x_train, y_train): self.clf.fit(x_train, y_train) def predict(self, x): return self.clf.predict(x) def fit(self,x,y): return self.clf.fit(x,y) def feature_importances(self,x,y): print(self.clf.fit(x,y).feature_importances_) ###Out-of-Fold Predictions ''' スタッキングでは,第二モデルの学習データに,第一のベースモデルの予測が使用される. しかし,全ての学習・テストデータを一度に使ってしまうと, ベースモデルが既にテストデータを見た状態にあるため, 第二モデルでオーバーフィットするリスクがある. そのため,交差検証を施す. ''' def get_oof(clf, x_train, y_train, x_test): oof_train = np.zeros((ntrain,)) oof_test = np.zeros((ntest,)) oof_test_skf = np.empty((NFOLDS, ntest)) for i, (train_index, test_index) in enumerate(kf): # NFOLDS回まわる x_tr = x_train[train_index] y_tr = y_train[train_index] x_te = x_train[test_index] clf.train(x_tr, y_tr) oof_train[test_index] = clf.predict(x_te) oof_test_skf[i, :] = clf.predict(x_test) oof_test[:] = oof_test_skf.mean(axis=0) return oof_train.reshape(-1, 1), oof_test.reshape(-1, 1) # ##################################### # #Generating our Base First-Level Models # ##################################### ###Parameters ''' パラメータの一部をリストアップする. n_jobs:コア数.-1にすると全てのコア. n_estimators:学習モデルの分類木の数.デフォルトは10. max_depth:木の最大深度.あまりに大きすぎるとオーバーフィットする. verbose:学習プロセス中にテキストを出力するか.0なら出力しない.3なら繰り返し出力する. ''' # 各モデルのパラメータ # Random Forest rf_params = { 'n_jobs': -1, 'n_estimators': 500, 'warm_start': True, #'max_features': 0.2, 'max_depth': 6, 'min_samples_leaf': 2, 'max_features' : 'sqrt', 'verbose': 0 } # Extra Trees et_params = { 'n_jobs': -1, 'n_estimators':500, #'max_features': 0.5, 'max_depth': 8, 'min_samples_leaf': 2, 'verbose': 0 } # AdaBoost ada_params = { 'n_estimators': 500, 'learning_rate' : 0.75 } # Gradient Boosting gb_params = { 'n_estimators': 500, #'max_features': 0.2, 'max_depth': 5, 'min_samples_leaf': 2, 'verbose': 0 } # Support Vector Classifier svc_params = { 'kernel' : 'linear', 'C' : 0.025 } ''' さらに,Helpers via Python Classesで作成したクラスを用いて, 5つの学習モデルのオブジェクトを作成する. ''' # 5つの学習モデルのオブジェクトを作成 rf = SklearnHelper(clf=RandomForestClassifier, seed=SEED, params=rf_params) et = SklearnHelper(clf=ExtraTreesClassifier, seed=SEED, params=et_params) ada = SklearnHelper(clf=AdaBoostClassifier, seed=SEED, params=ada_params) gb = SklearnHelper(clf=GradientBoostingClassifier, seed=SEED, params=gb_params) svc = SklearnHelper(clf=SVC, seed=SEED, params=svc_params) ###Creating NumPy arrays out of our train and test sets ''' ベースモデルへの入力用データをNumPy配列で準備する. ''' x_kdd_train = kdd_train.values # 学習データ #testデータを連結 kdd_test = kdd_test.append(kdd_labeled_test) x_kdd_test = kdd_test.values #テストデータ ###Output of the First level Predictions ''' 学習データとテストデータを5つのベースモデルに送り, 交差検証(get_oof関数)を行い,予測を行う. ''' # 5つのベースモデルで予測 et_oof_train, et_oof_test = get_oof(et, x_kdd_train, kdd_labeled_train, x_kdd_test) # Extra Trees Classifier rf_oof_train, rf_oof_test = get_oof(rf,x_kdd_train, kdd_labeled_train, x_kdd_test) # Random Forest Classifier ada_oof_train, ada_oof_test = get_oof(ada, x_kdd_train, kdd_labeled_train, x_kdd_test) # AdaBoost Classifier gb_oof_train, gb_oof_test = get_oof(gb,x_kdd_train, kdd_labeled_train, x_kdd_test) # Gradient Boost Classifier svc_oof_train, svc_oof_test = get_oof(svc,x_kdd_train, kdd_labeled_train, x_kdd_test) # Support Vector Classifier print("Training is complete") ###Feature importances generated from the different classifiers ''' 予測に関わる特徴の重要度を見る. ''' rf_feature = rf.feature_importances(x_kdd_train,kdd_labeled_train) et_feature = et.feature_importances(x_kdd_train,kdd_labeled_train) ada_feature = ada.feature_importances(x_kdd_train,kdd_labeled_train) gb_feature = gb.feature_importances(x_kdd_train,kdd_labeled_train)

試したこと

n_splitsの数値を変えた

補足情報(FW/ツールのバージョンなど)

Python 3.6.9 :: Anaconda, Inc.

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2019/09/16 11:52

エラーメッセージは全文掲載された方が良いです。
退会済みユーザー

退会済みユーザー

2019/09/16 12:00

承知しました!
guest

回答1

0

ベストアンサー

ドキュメント(scikit-learn v0.21.3)によると

class sklearn.model_selection.KFold(n_splits=’warn’, shuffle=False, random_state=None)

となっています。

n_splitsの前に引数があるのがNGなのではないでしょうか?

投稿2019/09/16 12:32

meg_

総合スコア10739

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/09/17 03:34

ありがとうございます! 前バージョンのKFoldだと勘違いしていました! 解決しました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問