2017-08-29 2 views
1

精度対パラメータプロットを描画する必要があります(主な作業は、グリッド検索を使用して最適なパラメータ値を見つけることです)。さて、私は反復しているパラメータの組み合わせがたくさんあるので、私は、それぞれの組み合わせに反復番号を付けることを考えました。精度のプロットと反復数のプロットを作成します。クラスラベルがない場合、matplotlibで凡例を定義する方法は?

パラメータ値の各組み合わせに対して精度をプロットする必要があります。 しかし、それぞれの反復回数に対してパラメータの組み合わせの値を持つプロットを凡例としても提供したいと思います。 どうすればよいですか?

parameters = parameterGrid(paramGrid) 
    i = 0 
    lst = [] 
    maxScore = 0 


for parameter in parameters: 
    meanAcc = 0 

    clf = DecisionTreeClassifier(**parameter) 
    dTree = clf.fit(xTrain,yTrain) 
    score = dTree.score(xTest, yTest) 
    if(score > maxScore): 
     maxScore = score 
     selectedParams = parameter  
    plt.plot(i,score) 
    #plotting accuracy against current parameter set 

    l = [i,score] 
    lst.append(l) 
    legend[i] = parameter 
    i += 1 



plt.xlabel('X Label') 
plt.ylabel('Y Label') 
plt.show() 

また、私がどのようにプロットを行うべきかについての他の提案は大歓迎です。 助けてください。

+0

を使用することができますパラメータをループしている場合は? – Julien

+0

コードを少し投稿すると、より簡単に手助けすることができます。インデックスから構築されたラベルのリストを作成し、それらをプロットされる各データセットに割り当てることは容易でなければなりません。 –

+0

@Julien - plt.plot()を使用してからplt.legend()を使用すると何も問題ありません。私は凡例に希望の情報を入れる方法を知りません。 また、plt.plot()は空のプロットを返します。 plt.scatterは正しい結果を与えています。理由を理解できません。 – chi

答えて

0

あなたは `plt.plot(...、ラベル= "何とか")を使用して、` `、その後plt.legend()`と間違って何

iter = 0 
for param1 in [1,2,3,4]: 
for param2 in [2,3,4,5]: 
    plt.plot(..., label=str(param1)+"_"+str(param2)+"_"+str(iter)) 
    iter += 1 
plt.legend() 
+0

コードを含めるために私の答えを編集しました。それを見てください。 plt.plot(x、y)は私に空のプロットを与えています。 plt.scatterは動作しています。私は理由を知りません。 – chi

+0

plt.plot()はラインプロットであるため、ラインプロット上に単一のポイントを持つことは実際には意味がありません。おそらくplt.scatter()はあなたが使いたいものです。同じ方法を使用して凡例を作成することができます。 – jfried

+0

私は一点を持っていたいとは思わない。各パラメータの組み合わせごとに精度があります。複数の点があります。だから、線グラフがより適していると思います。 – chi

関連する問題