5

ライブラリscikit-learnを使用して、個々のサンプルに重みを付けてリッジ回帰を実行しています。これは次の方法で実行できますesimator.fit(X, y, sample_weight=some_array)。直感的には、重みが大きいほど、対応するサンプルの関連性が高いことを意味すると思います。

ただし、次の 2 次元の例で上記の方法をテストしました。

    from sklearn import linear_model
    import numpy
    import matplotlib.pyplot as plt

    #Data
    x= numpy.array([[0], [1],[2]])
    y= numpy.array([[0], [2],[2]])
    sample_weight = numpy.array([1,1, 1])
    #Ridge regression
    clf = linear_model.Ridge(alpha = 0.1)
    clf.fit(x, y, sample_weight = sample_weight)
    #Plot
    xp = numpy.linspace(-1,3)
    yp=list()
    for x_i in xp:    
        yp.append(clf.predict(x_i)[0,0])
    plt.plot(xp,yp)
    plt.hold(True)
    x = list(x)
    y = list(y)
    plt.plot(x,y,'or')

このコードを実行し、最初のサンプルの重みを 2 倍にして再度実行します。

sample_weight = numpy.array([2,1, 1])

結果の線は、重みの大きいサンプルから離れます。重みが大きいサンプルほど関連性が高いと予想されるため、これは直感に反します。

ライブラリを間違って使用していますか、それともエラーがありますか?

4

1 に答える 1