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

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

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

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

機械学習

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

データマイニング

データマイニングは、購買履歴やクレジットカードの利用履歴、電話の通話履歴など企業にある大量のデータを解析して、その中に隠れたパターンやルールを探し出す技術です。DMと略されることもあります。

Q&A

1回答

392閲覧

文書分類で学習によって作成されたファイルからパラメータを読み込み, それを使用してテスト用データを分類するプログラムを作成したいです

wagashi_157

総合スコア51

Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

機械学習

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

データマイニング

データマイニングは、購買履歴やクレジットカードの利用履歴、電話の通話履歴など企業にある大量のデータを解析して、その中に隠れたパターンやルールを探し出す技術です。DMと略されることもあります。

0グッド

0クリップ

投稿2022/07/06 11:31

前提・実現したいこと

学習用データ(trainディレクトリの記事を形態素解析した train.list )からパラメータ(事前確率 P(c), 条件付き確率 P(e|c))を記録を計算し, それらを記録したmodelファイルからパラメータを読み込み, それを使用してテスト用データ(testディレクトリの記事を形態素解析した test.list)の記事を分類する分類用プログラムを作成したいです。ナイーブベイズの実装です。

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

ファイルの読み込みは何とか理解できたものの, 分類をするのにどのような表現をしたら良いか分かりません。最終的に対数尤度まで求めるのですがエラーの原因が分からないので教えていただきたいです。

Global symbol "$term" requires explicit package name (did you forget to declare "my $term"?) at bayes_classifier.pl line 74. Global symbol "@e" requires explicit package name (did you forget to declare "my @e"?) at bayes_classifier.pl line 76. Global symbol "$noun" requires explicit package name (did you forget to declare "my $noun"?) at bayes_classifier.pl line 76. Execution of bayes_classifier.pl aborted due to compilation errors.

該当のソースコード

Perl

1#!/usr/bin/perl 2use strict; 3use Encode; 4use utf8; 5 6main(); 7 8sub main 9{ 10 open(my $IN,"test.list"); 11 my %ClassHash; # 各クラスに属する文書の出現数 12 my $N=0; # 文書総数 13 my $H; # 素性総数 14 15 my %TrainData; 16 my %HypoHash; 17 18 while(my $data_utf8 = <$IN>) 19 { 20 my $data = decode_utf8($data_utf8); 21 chomp($data); 22 23 # ファイルのクラスを取得 24 my @e = split(/ /,$data); 25 my $file = $e[0]; 26 my $class = $e[1]; 27 my $word_str = $e[2]; 28 29 # 事前確率用の頻度 30 $ClassHash{$class}++; 31 $N++; 32 33 # fileの形態素解析を行い、名詞を取り出す 34 my %TermFrequency; 35 my @word_list = split(/,/,$word_str); 36 37 foreach my $noun (@word_list) 38 { 39 $TermFrequency{$noun}++; 40 $H++; 41 } 42 43 # 素性の出現頻度 44 foreach my $term (keys %TermFrequency) 45 { 46 my $tf = $TermFrequency{$term}; 47 $HypoHash{$class} += $tf; 48 49 # 各クラスにおける名詞の頻度を格納 50 $TrainData{$class}{$term} += $tf; 51 } 52 undef %TermFrequency; 53 } 54 close($IN); 55 56 my %PH; # 事前確率 P(c) 57 my %PE; # 属性ごとの条件付き確率 P(E_{n}|H) 58 59 # 学習式におけるパラメータを学習 60 foreach my $class (keys %ClassHash) 61 { 62 # 事前確率: P(c) 63 $PH{$class} = $ClassHash{$class}/$N; 64 65 # 各属性値の条件付き確率 P(e_{i}|c) 66 foreach my $term (keys %{$TrainData{$class}}) 67 { 68 my $f_ce = $TrainData{$class}->{$term}; 69 my $f_c = $HypoHash{$class}; 70 71 $PE{$class}->{$term} = $f_ce/$f_c; 72 } 73 my $a; 74 $a=$a+log($term)/log(2); 75 my $cl=$PH{$class}+$a; 76 print encode_utf8("$e[0] → $noun $cl"); 77 } 78}

test.list

2012-04-18_1.txt none パソコン,iPad,ゲーム,複数,操作,ワイヤレス,メルコ,ホールディングス,グループ,中核,バッファ,ロー,名古屋,斉木,邦明,バッファ,ロー,ワイヤレス,5月,上旬,全国,家電,量販,ワイヤレス,PC,型番,出荷,5月,上旬,ワイヤレス,専用,型番,出荷,5月,上旬,メイン,パソコン,マウス,キーボード,パソコン,ゲーム,iPad,操作,ワイヤレス,コネクター,追加,複数,操作,インストール,不要,使い,安心,イメージ,ページ,ページ,buffalo,products,catalog,supply,peripheral,一覧,ページ,buffalo,products,catalog,supply,peripheral,掲載,仕様,機種,改定,仕様,変更,機種,追加,最新,ページ,確認,掲載,希望,小売,消費,ユーザー,バッファロー,マガジン,ハロー,バッファロー,ハローバッファロー,86886,URL,buffalo,ユーザー,参加,ZQwoonet,SAK,zqwoo,sak,公衆,無線,LAN,FREESPOT,freespot, ・・・ 2012-04-27_0.txt none 日立,最大手,IT,大学,クラ,ウド,戦略,パートナーシップ,契約,締結,日立製作所,千代田,執行,中西,宏明,日立,社会,最大手,IT,たび,大学,基幹,クラウドコンピューティング,形態,戦略,パートナーシップ,契約,締結,両社,共同,日立,大学,現地,大学,コーポレーション,設立,大学,本部,SaaS,形態,試験,年度,現地,大学,本格,日立,多く,実績,事務,大学,経営,包括,支援,ソリューション,提携,日立,支援,営業,活動,両社,構築,ノウハウ,もと,年度,以降,大学,展開,検討,近年,適合,人材,目的,教育,大学,大幅,増加,増加,傾向,増加,新規,大学,設立,大学,規模,拡大,事務,整備,課題,現状,大学,限定,大学,事務,全体,包括,支援,整備,大学,背景,需要,期待,日立,多く,大学,IT,総合,大学,for,大学,SaaS,形態,for,中核,大学,全体,経理,大学,経営,基盤,日立製作所,公共,最大手,IT,SaaS,大学,基幹,協業,多数,実績,大学,経営,IT,プロジェクト,日立,大学,クラ,ウド,戦略,パートナー,関係,将来,両社,大学,展開,概要,所在地,社会,設立,従業,概要,最大手,保守,展開,テスト,組み込み,海外,拠点,グローバル,大阪,ヨーロッパ,ほか,ホームページ,日立,大学,ソリューション,ホームページ,hitachi,index,html,

modelファイル

<feature> 43081 <prior> ゲーム・娯楽 0.0266666666666667 <prior> コンピューター 0.0977777777777778 <prior> 情報・コンテンツ 0.0622222222222222 <prior> 周辺機器 0.164444444444444 <prior> 半導体 0.186666666666667 <prior> 通信・インターネット 0.102222222222222 <prior> システム・ソフト開発 0.36 <conditional> 情報・コンテンツ 復旧 0.000595592614651578 <conditional> 情報・コンテンツ WEB 0.000595592614651578 <conditional> 情報・コンテンツ ウド 0.00119118522930316 ・・・ <conditional> 半導体 紀尾井町 0.00215156586182166 <conditional> 半導体 エレクトロン 0.00083672005737509 <conditional> 半導体 オプション 0.0011953143676787

試したこと

全ての要素にアクセスするためにforeach関数を用いてその中で全て計算を行ってみたものの,
引数が上手く繋がりませんでした。

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

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

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

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

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

guest

回答1

0

Perlのスコープについて理解しよう
https://perlzemi.com/blog/20110128130016.html

スコープの中で宣言されたレキシカル変数(myで宣言された変数)は、そのスコープ内でしか参照することができません。また変数に含まれる値はスコープが終わった時点で解放されます。

投稿2022/07/06 11:57

RiaFeed

総合スコア2701

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問