前提
自作のCSVデータとscikit-learnを用いて機械学習の勉強をしています。アンサンブル学習のバギングを使って線形識別モデルの精度を上げようとしています。その勉強をしていると以下のようなエラーメッセージが発生しました。
識別機を2分木のDecisionTreeClassifier(random_state=0)を用いるとエラーメッセージは出なくなりました。バギングは線形識別では使えないのでしょうか?それともプログラムに間違いがあるのでしょうか?
もしエラーメッセージの解決策をご存知の方はご教示いただけると幸いです。
よろしくお願いします。
実現したいこと
- バギングを線形識別モデルで使いたい。
発生している問題・エラーメッセージ
Traceback (most recent call last): File ".\unsumble.py", line 58, in <module> predicted_labels = bagging_model.predict(X) File "D:\anaconda\lib\site-packages\sklearn\ensemble\_bagging.py", line 677, in predict predicted_probabilitiy = self.predict_proba(X) File "D:\anaconda\lib\site-packages\sklearn\ensemble\_bagging.py", line 720, in predict_proba all_proba = Parallel(n_jobs=n_jobs, verbose=self.verbose, File "D:\anaconda\lib\site-packages\joblib\parallel.py", line 1041, in __call__ if self.dispatch_one_batch(iterator): File "D:\anaconda\lib\site-packages\joblib\parallel.py", line 859, in dispatch_one_batch self._dispatch(tasks) File "D:\anaconda\lib\site-packages\joblib\parallel.py", line 777, in _dispatch job = self._backend.apply_async(batch, callback=cb) File "D:\anaconda\lib\site-packages\joblib\_parallel_backends.py", line 208, in apply_async result = ImmediateResult(func) File "D:\anaconda\lib\site-packages\joblib\_parallel_backends.py", line 572, in __init__ self.results = batch() File "D:\anaconda\lib\site-packages\joblib\parallel.py", line 262, in __call__ return [func(*args, **kwargs) File "D:\anaconda\lib\site-packages\joblib\parallel.py", line 262, in <listcomp> return [func(*args, **kwargs) File "D:\anaconda\lib\site-packages\sklearn\utils\fixes.py", line 222, in __call__ return self.function(*args, **kwargs) File "D:\anaconda\lib\site-packages\sklearn\ensemble\_bagging.py", line 143, in _parallel_predict_proba proba[i, predictions[i]] += 1 IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices
該当のソースコード
Python3.8.8
1from sklearn.linear_model import LinearRegression 2from sklearn.ensemble import BaggingClassifier 3import csv 4import numpy as np 5import pandas as pd 6from sklearn.tree import DecisionTreeClassifier 7 8filename = "data.csv" 9x = [] 10X = np.empty((0,2)) #入力データ 11y = np.empty(0) #教師データ 12white = [0] * 100 #白の数 13white_corner = [0] * 100 #白の角の数 14black = [0] * 100 #黒の数 15black_corner = [0] * 100 #黒の角の数 16 17with open(filename, encoding='utf-8', newline='') as f: 18 csvreader = csv.reader(f) 19 for row in csvreader: 20 x.append(row[0:64]) 21 if row[64]=="W": 22 y = np.append(y,1) 23 elif row[64]=="B": 24 y = np.append(y,0) 25 26#白の数と黒の数をカウントする 27i = 0 28for n in x: 29 for m in n: 30 if m == "1": 31 white[i] += 1 32 elif m == "2": 33 black[i] += 1 34 #取らてはいけない場所のコマ数をカウントする 35 redzone =[0,1,6,7,8,9,14,15,48,49,54,55,56,57,62,63] 36 for rz in redzone: 37 if n[rz] == "1": 38 white_corner[i] += 1 39 elif n[rz] == "2": 40 black_corner[i] += 1 41 i += 1 42 43#入力データの作成 44for k in range(100): 45 X = np.append(X,[[white[k]-black[k],white_corner[k]-black_corner[k]]],axis=0) 46 47lr = LinearRegression() 48clf = DecisionTreeClassifier(random_state=0) 49 50X = X.astype(np.int8) 51bagging_model = BaggingClassifier(base_estimator=lr) 52bagging_model.fit(X,y) 53 54predicted_labels = bagging_model.predict(X) 55print(predicted_labels) 56
補足情報(FW/ツールのバージョンなど)
Python 3.8.8
scikit-learn 0.24.1
回答1件
あなたの回答
tips
プレビュー