コーディングスタイルに関する学習学習 - 機能選択(Scikit Learn)
質問
符号化スタイルから学生のコードの採点を自動化することが可能であるかどうかを調べています。これには、重複コードを回避し、コードをコメントアウトし、変数の悪い命名などのものが含まれます。
私たちは過去の学期の組成スコア(1~3の範囲)に基づいて学びながら学習しようとしています。基本的な考え方は、私たちが学生の提出物からの特徴を抽出し、feature_vectorを作り、Sciit-Learnを使用してロジスティック回帰を通じて実行することです。また、次元のベクトルのPCAを実行するなど、さまざまなものを試してみました。
私たちの分類器は単に最も頻繁なクラスを推測しています。これは2のスコアです。私たちの機能は単に予測的ではないからです。 主導的な学習アルゴリズムのための他の可能な理由は、支配的なクラスを推測するだけの可能な理由は?これを防ぐ方法はありますか?
私はそれが予測されていない特徴があると考えているように、は「良い」機能が何であるかを決定する方法はありますか?(そして良く、私は識別不能または予測的な意味を意味する)。
注:副実験として、私たちは過去の成績がすでに採点された読者のグレードの割り当てを持つことによって、過去の成績がどれほど一貫していたかをテストしました。プロジェクトのために同じ構成スコア(1-3)だけを与えました。これは、このデータセットは単に分類できないかもしれません。 他のアイデアのどんなヒント?またはそれが事実上のものであるかどうか?
機能は次のとおりです。重複コードの行数、平均関数長、1文字変数の数、コメントアウトコードを含む行数、最大ライン長、未使用の変数の数、未使用の変数、未使用のパラメータ。もっといくつかの機能を視覚化し、平均がスコアと相関している間、変動は本当に大きい(有望ではない)ことがわかった(有望な)。
編集:プロジェクトの範囲:1つのクラスで特定のプロジェクト(Skeleton Codeを使用して)1つの特定のプロジェクトから学びようとしています。まだ一般化する必要はありません。
解決
ただの考え - Andrew NGは、coursera(href="https://www.coursera.org/course/ml" rel="nofoll/jp/course/ml"https://www.courseRe.nofoll"> https:///www.coursera。org / course / ml )。学生がクラス全体を通して送信するプログラミング割り当てがいくつかあります。私は読書を覚えています(残念ながら、私は今記事を見つけることができません)、学生がクラスから提出されたプログラミングの割り当てを試みているいくつかの進行中の研究がありました。/ P>
これがあなたを助けるかどうかはかなりないが、これを教えられていない学習問題としてこれを扱うかもしれない(例えば、同様のコードサンプルが同様のスコアを受け取るべき直感とさまざまなコードサンプルの類似点を探すだけ)。
他のヒント
機能:重複コードの行数、平均関数長、1文字の変数の数、コメントアウトコードを含む行数、最大行長、未使用の変数、未使用のパラメータの数。もう少し..
あなたは特徴を正規化しようとしましたか?特定のコードをカテゴリに分類することができるニューラルネットワークを訓練したいようです。さまざまなコードが言われているため、異なる複数の重複コードと異なる数の未使用変数が異なるが等しく悪い可能性があるためです。このため、「便利な」コードの全線で、パラメータを正規化する必要があります。
良い機能を見つけることが失敗することは非常に困難です。停滞するとき、常にあなたの直感に従ってください。人間が仕事をすることができるならば、コンピュータを得ることができます。あなたの機能は与えられたコードを評価するために非常に控えめくされているので、彼らは仕事をするべきです(彼らが正しく使われていることを考える)。
概要:機能の正規化は問題を解決する必要があります。
-
あなたのターゲットクラスのバランスをとることがあります(1,2,3のスコアの密度が最も多い)。オーバーサイズのクラスをランダムにサンプリングし、ブートストラップサンプルのサンプルクラスをサンプリングするか、不均衡なデータを説明するアルゴリズムを使用することもできます(Pythonではわかりません)。
-
あなたがオーバーフィットを防ぐために交差検証していることを確認する
-
どの属性が重要なのかを理解する方法はいくつかあります。
- それらの1つから始めて、すべての属性の組み合わせを試してください
- またはそれらのすべての属性の組み合わせをすべて試してください
- またはランダム(またはw遺伝的Algo) で属性の組み合わせを試す
最も高い交差検定精度で属性コンボを選択します。
属性列の積を取り込むこともできます。