2017年4月26日水曜日

ナイーブベイズ分類対象コーパスについて

これまで、ナイーブベイズ分類対象のコーパスは固定して分類を複数回(10回)行ってきたが、結果に大きなバラツキは見られなかった。次にコーパス自体を変えて分類を行ってみてはどうだろう。
すなわち、最初は1~100件、次は101~200件、・・・と毎回異なるデータ(抄録)を抽出して分類を行ってみてはどうだろう。
その場合、範囲を指定してデータを抜き取るプログラムが必要となる。それを以下に示す。
Sub run()
    データ抽出 101, 100
End Sub

Sub データ抽出(オフセット As Integer, 件数 As Integer)
Dim ws As Worksheet

Dim 疾患名 As String
Dim i As Integer
Dim j As Integer

Dim PATH As String
Dim fno1 As Integer
Dim fno2 As Integer

    PATH = ActiveWorkbook.PATH
    
    fno1 = FreeFile
    Open PATH & "\コーパス\抄録" & 件数 & ".txt" For Output As #fno1
    
    fno2 = FreeFile
    Open PATH & "\コーパス\疾患" & 件数 & ".csv" For Output As #fno2
    
    Set ws = Worksheets("疾患")
    
    Print #fno2, "疾患"
    i = 2
    
    Do While ws.Cells(i, 1).Value <> ""
        j = 0
        疾患名 = ws.Cells(i, 1).Value
        Do While 疾患名 = ws.Cells(i, 1).Value
            j = j + 1
            If j >= オフセット And j < オフセット + 件数 Then
                Print #fno2, ws.Cells(i, 1).Value
                Print #fno1, ws.Cells(i, 23).Value
            End If
            i = i + 1
        Loop
    Loop
    
    Close #fno1
    Close #fno2
    
End Sub

プログラムの使い方は次の通り。
 データ抽出 オフセット(先頭のデータの位置), 抽出件数
なお、このプログラムを含むExcelファイルがあるフォルダ内に「コーパス」という名前のフォルダをあらかじめ作っておく。抄録、疾患の抽出結果はそのフォルダ内に「抄録XXX.txt」、「疾患XXX.csv」という名前で出力される。 ここで、XXXは抽出件数である。

2017年4月24日月曜日

ナイーブベイズ分類の途中結果2

4/24 ナイーブベイズ分類の途中結果2



 今回は、抄録を100件から150、200・・・と50件ずつ増やし、500件までナイーブベイズ分類を行いました。表1は、各件数の結果を降順に並べたものです。グラフ1は、表1の結果を表したものです。

表1
グラフ1

 結果より、100件~200件までは上昇していますが、250件で少し下がり、その後は67%前後で停滞しています。1番高い正解率が200件の68%となっており、以降は正解率の上昇が見られませんが、抄録の件数を増やすことで上昇するかもしれません。今後は抄録の件数をさらに増やし、正解率は上昇するのか、それとも停滞したままなのかを調べたいと思います。



2017年4月19日水曜日

ナイーブベイズ分類の途中結果

4/19 ナイーブベイズ分類の途中結果

 
 KH Coderのナイーブベイズ分類器を使って論文の抄録を分類してみました。

 今回は、抄録を10件~100件まで10件ずつ増やしてナイーブベイズ分類を行った結果を表示します。表1は、各件数の結果を降順に並べたものです。グラフ1は、表1の結果を表したものです。


表1

グラフ1

 10件から順に見てみると途中で数字が低くなっている部分もありますが、全体的に右肩上がりになっていることが見て取れます。今後も件数を増やし、正解率の向上がどの程度まで上がるのか調べたいと思います。



2017年4月17日月曜日

2017年4月12日水曜日

ワイヤーフレームワーク

ワイヤーフレームワークを作るサイト

Cacoo

ルール

・自分が行った作業はチャットに残しておくこと。






ナイーブベイズ分類器

KH Coderのナイーブベイズ分類器を使って論文の抄録を分類してみました。

【方法】
コーパスは医学中央雑誌からダウンロードした論文の抄録です。検索条件として「子宮頸がん」, 「子宮内膜症」, 「子宮体癌」, 「子宮筋腫」, 「卵巣腫瘍」を指定し、得られた論文からそれぞれ10件ずつ、合計50件の論文の抄録を抽出して実験用データを作成します。
50件の実験データは10個に分割され、9つのデータで学習した結果を残りの1件でテストします。この学習とテストを10回繰り返します。これを交差妥当性テストと言います。

【結果】

交差妥当性の結果を下表に示します。



正解率は42.0%でした。交差妥当性テストはやるたびに値が変わります。学習が不安定だと結果は大きくばらつくでしょう。そこで、交差妥当性テストを10回やって結果を箱ひげ図で表すことにします。
このようにして、抽出する論文数を20件、30件、・・・と増やしながら正解率がどのように変化していくかを調べます。横軸に抽出する抄録数、縦軸に正解率をとってグラフを描くとよいでしょう。その場合。正答率は箱ひげ図にするのがポイントです。おそらくコーパスのサイズに応じて正解率は上昇し、なおかつ分類器が安定してくるので箱ひげ図によって正解率のばらつきも小さくなることがわかるでしょう。正解率がある程度頭打ちになったら、それ以上コーパスサイズを上げても分類器の精度向上は望めないので打ち切ります。

新しい年度が始まりました

今日から新しい年度を迎えます。心機一転、目標に向けて頑張りたいと思います。まず、今日は今後のスケジュールについて確認します。今年は大阪である医療情報学連合大会(開催期間:11/20~23)に演題を応募することになっています。演題応募期間は4/25~6/12です。遅くとも5月中に演題募集の抄録を完成させなければなりません。
また、6月~7月に卒研の中間発表会が行われます。6/14、6/21、7/5、7/12、7/19のうちどれか1日を選びます。時間は16:30~17:30です。学会の準備が整えば、その内容を中間発表で報告すればいいのでさほど大変ではありません。ということで、学会に向けての準備が先決ということになるでしょう。
そこで、大雑把なスケジュールを作ってみました。






ちょっと過酷なスケジュールですが、前倒しで早め早めに進めていきましょう。

さて、これまでスマホアプリの作成や医中誌で疾患名を検索キーワードとして集めた論文の抄録から作ったコーパスを使って疾患と症状の関係を調べてきました。もう学会抄録提出まであまり時間がないので、今後はアプリ開発班と疾患と症状の関係(症状から疾患を分類する)を調べて疾患分類器を作成する班に分かれて作業をした方が良いでしょう。
アプリ開発班は機能要件を整理することから始めましょう。今回どのような機能を持ったアプリを作るのか、その機能を洗い出します。ついで、ユーザインターフェースとなる画面の設計を行います。そして、それが終わったらロジックを作ってアプリを完成させます。
このスマホアプリには入力された情報や利用者の個人属性に基づいて利用者に疑われる疾患を推測する機能を持たせます。というか、これが他のアプリには見られないメイン機能です。これを実現するために、症状から疾患を分類する分類器を作ります。この分類器を作るのがもう一つの班の役割です。
この分類器を作るために、これまで医中誌から集めた抄録を基に作ったコーパス(疾患とそれに対応する文書からなるコーパス)を分析して症状と疾患の関係を調べてきました。しかし、今一つ明確な関係を見いだせないままでいます。これまでは対応分析を行ってビジュアルに関係を把握しようとしていましたが、今はナイーブベイズ分類器を使って症状から疾患を分類する作業を始めようとしています。これがうまくいけば分類器をサーバ上に実装し、スマホアプリに分類機能のAPIを提供することにより、スマホアプリからこの機能呼び出すことができます。
学会の抄録作成にはここまでを行う必要があります。