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

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

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

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

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

機械学習

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

Python

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

Q&A

1回答

2144閲覧

アルゴリズムのNameErrorが発生します(MultinomialNB, sklearn, python)

hankechi78

総合スコア8

scikit-learn

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

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

機械学習

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

Python

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

0グッド

0クリップ

投稿2020/12/28 12:22

編集2020/12/28 12:24

前提・実現したいこと

マルチクラスの分類問題で教師あり学習のプログラムを実装中、アルゴリズムとしてMultinomialNBの使用を試みたところ、NameErrorが発生しました。

Traceback (most recent call last): File "/Users/hankechi78/opt/anaconda3/lib/python3.8/site-packages/IPython/core/interactiveshell.py", line 3343, in run_code exec(code_obj, self.user_global_ns, self.user_ns) File "<ipython-input-128-0d747af3404c>", line 6, in <module> MultinomialNB() NameError: name 'MultinomialNB' is not defined

最初にfrom sklearn.naive_bayes import MultinomialNBを挿入しているのでMultinomialNBは確かにインポートされているはずです。
エラーの原因がわかりません。

%matplotlib inline from nltk.corpus import stopwords from sklearn import metrics from sklearn import model_selection from sklearn.base import BaseEstimator, TransformerMixin from sklearn.dummy import DummyClassifier from sklearn.ensemble import RandomForestClassifier from sklearn.feature_extraction import DictVectorizer from sklearn.feature_extraction.text import CountVectorizer,TfidfVectorizer from sklearn.linear_model import LogisticRegression from sklearn.metrics import classification_report, f1_score, accuracy_score, confusion_matrix from sklearn.model_selection import train_test_split from sklearn.multiclass import OneVsRestClassifier from sklearn.naive_bayes import MultinomialNB from sklearn.neighbors import KNeighborsClassifier from sklearn.pipeline import Pipeline, FeatureUnion, make_pipeline from sklearn.tree import DecisionTreeClassifier import spacy import matplotlib.pyplot as plt import numpy as np import pandas as pd import string (データフレームの作成、データの前処理部分は長くなるので省略) union = FeatureUnion(transformer_list = [ ("thematique_features", thematique_pipeline), ("declaration_feature", declaration_pipeline2), ("position_feature", position_pipeline)]) preprocess_pipeline = make_pipeline( union ) preprocess_pipeline.fit(X_train) classifier_pipeline = make_pipeline( preprocess_pipeline, MultinomialNB() ) classifier_pipeline.fit(X_train, y_train)

試したこと

Jupyter notebookで作成しています。もう一度念のため冒頭のセルから順に実行していきましたが、同様にNameErrorが表示されます。

補足:インストール済みのsckit learnの情報

Name: scikit-learn
Version: 0.23.1
Summary: A set of python modules for machine learning and data mining
Home-page: http://scikit-learn.org
Author: None
Author-email: None
License: new BSD
Location: /Users/hankechi78/opt/anaconda3/lib/python3.8/site-packages
Requires: numpy, threadpoolctl, scipy, joblib
Required-by: mglearn

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

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

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

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

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

meg_

2020/12/28 15:48

質問のコードを試そうとしたところ、下記エラーが発生したので質問のエラーは再現出来ませんでした。 NameError: name 'thematique_pipeline' is not defined
hankechi78

2020/12/30 07:10

ありがとうございます! @meg_さん pipelineについては、手元のデータに合わせて設定しているものです。 今回はアルゴリズムが呼び出せないエラーということで直接的には無関係かと思い割愛しました。 @jbpb0さん そちらの方法は存じ上げませんでした、ありがとうございます! ただ、他のプログラムではunion = FeatureUnion(transformer_list = []で問題なくpipelineをまとめてのデータの前処理ができているので、自分の使っている方法自体には問題ないかと思います・・・
jbpb0

2020/12/30 08:57 編集

classifier_pipeline = make_pipeline(preprocess_pipeline, MultinomialNB()) の「preprocess_pipeline」と「MultinomialNB()」は、形式が全然違うものですよね 「preprocess_pipeline」はpipelineですが、「MultinomialNB()」は違います そのような全然違う形式のものを併記しても、make_pipeline()は扱えるのでしょうか? 【追記】試しにやってみたら、扱えました 失礼しました 最初から全部入りのpipe0と、後から追加したpipe2は、.fit後の.scoreは同点でした (Jupyter Notebookではなく、Anacondaプロンプト上で実行しました) from sklearn.feature_extraction.text import CountVectorizer from sklearn.feature_extraction.text import TfidfTransformer from sklearn.naive_bayes import MultinomialNB from sklearn.pipeline import make_pipeline from sklearn.datasets import fetch_20newsgroups pipe0 = make_pipeline(CountVectorizer(), TfidfTransformer(), MultinomialNB()) pipe1 = make_pipeline(CountVectorizer(), TfidfTransformer()) pipe2 = make_pipeline(pipe1, MultinomialNB()) print(pipe0) print(pipe2) newsgroups_train = fetch_20newsgroups(subset='train', remove=('headers', 'footers', 'quotes')) newsgroups_test = fetch_20newsgroups(subset='test', remove=('headers', 'footers', 'quotes')) x_train = newsgroups_train.data y_train = newsgroups_train.target x_test = newsgroups_test.data y_test = newsgroups_test.target pipe0.fit(x_train, y_train) pipe2.fit(x_train, y_train) print(pipe0.score(x_train, y_train)) print(pipe2.score(x_train, y_train)) print(pipe0.score(x_test, y_test)) print(pipe2.score(x_test, y_test))
meg_

2020/12/30 11:12

> pipelineについては、手元のデータに合わせて設定しているものです。 > 今回はアルゴリズムが呼び出せないエラーということで直接的には無関係かと思い割愛しました。 手元で検証しようと思ったところ実行不可でしたのでコメントしました。質問者さんの方で既にエラー原因の切り分けが出来ているとのこと了解しました。
guest

回答1

0

こんにちは、restart kernel にて、もう一度実行しても同じですか?
ここではそうするとうまく行ったとありました。
https://stackoverflow.com/questions/38808824/sklearn-error-when-trying-to-call-a-new-classifier-python-3-4

投稿2020/12/28 14:56

Kenta_py

総合スコア132

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

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

hankechi78

2020/12/30 07:10

ありがとうございます! 再度実行しても同じ結果になるので何かしら構造的な問題があるのかと思うのですが、もう一度やってみます・・・
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問