実験的な可読性モデル
srcmetrics には組み込みの重みがなく、既定で可読性スコアを計算することもありません。各メトリクスと人間が感じる可読性との関係は、事前には分からないためです。人間による評価値があれば、それを使ってモデルを学習できます。
ラベル
ヘッダが path,function,score の CSV ファイルです。
text
path,function,score
src/parser.py,parse_header,3.5
src/parser.py,parse_body,2
src/util.py,,4pathは解析結果に出てくるパスです。functionは関数名です。ファイル全体を評価するなら空にします。1 つのモデルのラベルは、すべて同じ種類(ファイルか関数)にします。- 各ラベルは、ちょうど 1 つのファイルまたは関数に対応する必要があります。存在しないパス、解析に失敗したファイル、同じファイル内で名前が重複する関数はエラーです。
scoreは有限の数値で、すべてが同じ値ではいけません。
学習
sh
srcmetrics analyze src -o result.json
srcmetrics model train --labels labels.csv -o model.json result.jsonモデルは、標準化した特徴量によるリッジ回帰です。
- 特徴量は既定で、ラベルのスコープのすべてのメトリクスです。ラベル付きのどれかの単位で
nullのもの、値が一定のものは除外し、理由をモデルファイルに記録します。--features id1,id2で明示的に選ぶこともでき、その場合はすべて使える特徴量である必要があります。 --lambdaは正則化の強さです(既定 1.0)。- モデルファイルには、特徴量、係数、学習データでの R²、5 分割交差検証の RMSE(ラベルが 5 件以上のとき)が記録されます。
予測
sh
srcmetrics model predict --model model.json result.jsonモデルのスコープに応じて、すべてのファイルまたは関数のスコアを出力します。特徴量が null の単位や、解析に失敗したファイルは score: null と理由になります。