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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

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

機械学習

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

Q&A

1回答

1372閲覧

Pythonの機械学習において特定の文字数以下のデータの属するクラスを確定させるプログラム

lalalabit

総合スコア7

Python 3.x

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

機械学習

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

0グッド

0クリップ

投稿2017/12/15 07:00

編集2017/12/15 07:03

###前提・実現したいこと
Twitterのプロフィール文を読み込んでクラス判定をする識別機を機械学習を用いて実現させようとしています。使用言語はPythonです。
識別機を作成しそこそこの識別率は出すことが出来ますが識別率を向上させるためにプロフィール文の文字数が特定の値以下だった場合クラスAに属すると断定するといった形のプログラムに書き換えたいと思っています。

###発生している問題・エラーメッセージ
sklearnライブラリによって作成された識別機に新たな機能を追加するということが出来るのかが分からず、行き詰っています。
詳しい方に知恵を貸して頂きたいです。

###該当のソースコード

from sklearn.model_selection import train_test_split from sklearn.feature_extraction.text import CountVectorizer from sklearn.naive_bayes import BernoulliNB import pandas as pd #データをcsvファイルから取得 original_df = pd.read_csv('data.csv',encoding='cp932') original_df['v1'].value_counts() #文字列データ(X)とラベルデータ(Y)を格納 X = pd.DataFrame(original_df['v2']) y = original_df['v1'] #学習用とテスト用に分割 X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.5) #CountVectorizer宣言(出現頻度3度以下の単語は除外) vectorizer = CountVectorizer(min_df=3) vectorizer.fit(X_train['v2']) #文字数、学習に用いる単語を表示 print('Vocabulary size: {}'.format(len(vectorizer.vocabulary_))) print('Vocabulary content: {}'.format(vectorizer.vocabulary_)) #特徴ベクトル化 X_train_bow = vectorizer.transform(X_train['v2']) X_test_bow = vectorizer.transform(X_test['v2']) print('X_train_bow:\n{}'.format(repr(X_train_bow))) print('X_test_bow:\n{}'.format(repr(X_test_bow))) #学習 model = BernoulliNB() model.fit(X_train_bow, y_train) #正答率表示 print('Train accuracy: {:.3f}'.format(model.score(X_train_bow, y_train))) print('Test accuracy: {:.3f}'.format(model.score(X_test_bow, y_test)))

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

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

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

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

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

guest

回答1

0

確定させるだけなら、

文字数をカウントして先に取り除けばよいのですが。
http://sinhrks.hatenablog.com/entry/2014/12/06/233032
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.str.len.html

それとも学習のときは使いたいけど、判定するときだけ決まった答えを出してほしいのですか?

python

1X = pd.DataFrame(original_df['v2']) 2y = original_df['v1'] 3 4nums = X.str.len() 5min_len = 5 6mask = nums < min_len 7X_short = X[mask] 8y_short = y[mask] 9 10X = X[~(mask)] 11y = y[~(mask)]

python

1class Predictor: 2 def __init__(self, model): 3 self.model = model 4 def predict(self, X): 5 # 処理 6 py = self.model.predict(X) 7 py['短い文のインデックス'] = '短い文のクラス' 8 return py

投稿2017/12/15 08:05

編集2017/12/21 02:46
mkgrei

総合スコア8560

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

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

lalalabit

2017/12/21 02:34

解答ありがとうございます。 学習では使いたいけど、判定では決まった答えを出して欲しいです。 識別機に機能を追加するようなイメージなのですが難しいでしょうか・・・
mkgrei

2017/12/21 02:42

学習時のモデルを要素に持つような判別クラスを作るのが一番早いです。 識別器のクラスを継承して、識別時のメソッドを新たに作ってもよいのですが、汎用性が落ちる気がします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問