2016-09-26 17 views
2

私は金属コイルの品質を予測しようとしています。私は幅10メートル、長さ1〜6キロメートルの金属コイルを持っています。訓練データとして、私は〜600のパラメータを測定し、各10メートル、最終的な品質管理マーク - 良い/悪い(コイル全体)。悪いことは少なくとも1つの場所があることを意味しますコイルが悪いです、正確にどこにデータがありません。私は約10000コイルのデータを持っています。いくつかの点の最小値としての損失関数、カスタム損失関数および勾配

私たちは、このデータのロジスティック回帰を訓練したいと考えています(2つの要因で)。

X = [[0, 0], 
     ... 
    [0, 0], 
    [1, 1], # coil is actually broken here, but we don't know it yet. 
    [0, 0], 
     ... 
    [0, 0]] 

Y = ????? 

私は分類器のために混乱しますので、私はちょうど、Y、実行クラシファイアに「悪い」のすべて置くことはできません。私はどこに悪い位置があるのか​​わからないので、私はすべての "良い"と1つの "悪い"を置くことはできません。

私が気づいている解決策は以下の通りです。損失関数をsum((Y-min(F(x1、x2)))^ 2)(1つのコイルに属するすべてのF )not sum((YF(x1、x2))^ 2)。この場合、恐らくFは悪いところを指すように正しく訓練されます。私はそれのための勾配が必要です、それはすべての点でそれを計算することは不可能です、分はすべての場所でdifferentiableではありませんが、私は弱い勾配を代わりに使用することができます(各場所でコイルで最小限の関数の値を使用して)。

私は多かれ少なかれ自分でそれを実装する方法を知っていますが、疑問はscikit-learnでPythonでそれを行う最も簡単な方法です。理想的には、いくつかの学習方法(損失関数と勾配に基づく多くの方法)で同じ(または容易に適応可能)でなければなりません。このように動作する学習方法のラッパーを作ることが可能です。

更新:gradient_boosting.pyを参照してください。内部抽象クラスLossFunctionには、損失と勾配を計算する能力があり、パースペクティブに見えます。共通の解決策がないように見えます。

+0

「min(F(x1、x2))」とはどういう意味ですか?**この最小操作は何ですか**? F(x1、x2)は単なる数値なので、典型的な表記法のようには見えません。これは横列ですか?したがって、あなたはいつも「悲観的」で、全体のセットからの予測が下がっているものは何でも予測したいと思っていますか? – lejlot

+0

1つのコイルではなく、コース全体のセットです。 –

+0

オリジナルの質問を更新しました –

答えて

2

機械学習コミュニティでは、スーパーセット学習として知られています。つまり、{(x_i、y_i)}という形でトレーニングを設定した標準的な監督設定の代わりに{ x_1、...、x_N}、y_1)}のように、その集合の少なくとも1つの要素にはy_1という特性があることがわかります。これは非常に一般的な設定ではありませんが、いくつかの研究が利用可能で、ドメイン内の論文用にGoogleが存在しています。

あなた自身の損失関数の点で - scikit-learnは無駄です。 Scikit-learnはシンプルさに関するもので、柔軟性の低い小さなツールセットを提供します。それは研究ツールではなく、あなたの問題は研究である。代わりに何を使うことができますか?例えば、autogradのような任意のシンボリック差別化ソリューションをお勧めします。は、のPythonコードで区別することができ、その上にscipy.optimize.minimizeを単に適用すると完了です!どんなカスタム損失機能もうまく動作します。

最小注釈として、最小演算子は区別できないため、モデルは何が起こっているかを把握するのに苦労するかもしれません。乗算はうまく区別できるのでsum((Y - prod_x F(x_1, x_2))^2)を実行しようとすることができます。同様の効果が得られます。少なくとも1つの要素が0と予測される場合、残りの要素から1の答えが削除されます。あなたも、それはより数値的に安定させるためにさらに一歩進み、行うことができます。

if Y==0 then loss = sum_x log(F(x_1, x_2)) 
if Y==1 then loss = sum_x log(1-F(x_1, x_2)) 

Y * sum_x log(1-F(x_1, x_2)) + (1-Y) * sum_x log(F(x_1, x_2)) 

に変換され、あなたの問題は確かにあるので、あなたは完璧な理にかなって交差エントロピーコストとの類似性に気づくことができます分類。そして、あなたは完璧な確率的な損失を持っています - それぞれのセグメントのそのような確率を「悪い」または「良い」と結びつけるので、オブジェクト全体の不良確率が高い(Y == 0の場合)か、低い場合(Y = = 1)。

関連する問題