質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
scikit-learn

scikit-learnは、Pythonで使用できるオープンソースプロジェクトの機械学習用ライブラリです。多くの機械学習アルゴリズムが実装されていますが、どのアルゴリズムも同じような書き方で利用できます。

Python 3.x

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

Python

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

Q&A

解決済

1回答

518閲覧

scikit-learnを使ったバギングによる線形識別の精度向上

Orange

総合スコア1

scikit-learn

scikit-learnは、Pythonで使用できるオープンソースプロジェクトの機械学習用ライブラリです。多くの機械学習アルゴリズムが実装されていますが、どのアルゴリズムも同じような書き方で利用できます。

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2022/07/29 12:43

編集2022/07/29 13:34

前提

自作の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

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

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

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

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

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

guest

回答1

0

ベストアンサー

回帰なので、回帰用のBaggingRegressorを使ったほうがいいのでは?
https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.BaggingRegressor.html#sklearn-ensemble-baggingregressor

投稿2022/07/29 13:04

East_san

総合スコア407

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

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

Orange

2022/07/29 13:32

回答ありがとうございます。回帰と分類を勘違いしておりました。やりたいことは分類でした。非常に申し訳ありません。
East_san

2022/07/29 14:03 編集

分類ならロジスティック回帰ですかね。回帰と言っていますが分類に使うものです。 もしくは現在エラーの出ていないDecisionTreeClassifierでもいいと思います
Orange

2022/07/31 02:40

ロジスティック回帰を使うことで線形モデルのバギングをができました! DecisionTreeClassifierは線形識別をしたいのでできるだけ使いたくなかったです。 ありがとうございましたm(_ _)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問