2012-11-29 18 views
1

我實現了一個算法(RLSR),其中有兩個正則化因子。基於這兩個因素的不同價值,我的成本函數減少或增加。現在,我通過傳遞錯誤的顏色顯現我的錯誤與plt.scatter這導致:基於2個因素的可視化誤差

enter image description here

但這裏的問題是我在y軸的數值非常小,所以你可以看到它們重疊我看不到我的結果的一部分。

alpha_list=[1e-11,1e-10,1e-10,5*1e-10,8*1e-10,1e-8,1e-8,5*1e-8,8*1e-6,1e-6,1e-6,5*1e-6,8*1e-6,1e-4,1e-4,5*1e-4,8*1e-4,1e-3,1e-3,5*1e-3,6*1e-3,8*1e-3]

我試圖減少透明度,但它沒有多大幫助!

,這是我是如何實現它:

eigenvalues,alphaa = np.meshgrid(eigRange,alpha_list) 

fig = plt.figure() 
DatavmaxTrain = np.max(normCostTrain) 
DatavminTrain = np.min(normCostTrain) 

DatavmaxTest = np.max(normCostTest) 
DatavminTest = np.min(normCostTest) 

plt.subplot(211) 

plt.scatter(eigenvalues,alphaa,s=130, c=normCostTrain,cmap=cm.PuOr, vmin=DatavminTrain, vmax=DatavmaxTrain, alpha=0.70) #-----for train 



cb1=plt.colorbar() 
cb1.set_label("normalized square error") 

plt.title("Train ") 
plt.xlabel("No. of Eigenvalues") 
plt.ylabel("Regualrization parameter") 

所以我要尋找一個更好的方式來可視化我的數據。

感謝

回答

3

如何繪製alpha_list值的日誌?

alpha_list = np.log(alpha_list) 

還有一些重疊,但至少值更均勻地分佈:

import matplotlib.pyplot as plt 
import numpy as np 

alpha_list=[1e-11,1e-10,1e-10,5*1e-10,8*1e-10,1e-8,1e-8,5*1e-8,8*1e-6,1e-6,1e-6,5*1e-6,8*1e-6,1e-4,1e-4,5*1e-4,8*1e-4,1e-3,1e-3,5*1e-3,6*1e-3,8*1e-3] 
alpha_list = np.log(alpha_list) 
eigRange = np.linspace(0,19,20) 

eigenvalues,alphaa = np.meshgrid(eigRange,alpha_list) 
normCostTrain = np.random.random((len(alpha_list),len(eigRange))) 

fig = plt.figure() 
DatavmaxTrain = np.max(normCostTrain) 
DatavminTrain = np.min(normCostTrain) 

plt.scatter(eigenvalues,alphaa,s = 130, c=normCostTrain,cmap=plt.get_cmap('PuOr'), 
      vmin=DatavminTrain, vmax=DatavmaxTrain, alpha=0.70) #-----for train 

cb1=plt.colorbar() 
cb1.set_label("normalized square error") 

plt.title("Train ") 
plt.xlabel("No. of Eigenvalues") 
plt.ylabel("Log(Regularization parameter)") 
plt.show() 

產量

enter image description here


這裏是一個3D的例子相同數據的縱座標圖,z軸(和顏色)都用來表示「標準化平方誤差」。

import matplotlib.pyplot as plt 
from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.cm as cm 
import numpy as np 

fig = plt.figure() 
ax = fig.add_subplot(111, projection = '3d') 

alpha_list = [1e-11, 1e-10, 1e-10, 5*1e-10, 8*1e-10, 1e-8, 1e-8, 5*1e-8, 8*1e-6, 
       1e-6, 1e-6, 5*1e-6, 8*1e-6, 1e-4, 1e-4, 5*1e-4, 8*1e-4, 1e-3, 1e-3, 
       5*1e-3, 6*1e-3, 8*1e-3] 

alpha_list = np.log(alpha_list) 
eigRange = np.linspace(0, 19, 20) 

eigenvalues, alphaa = np.meshgrid(eigRange, alpha_list) 
eigenvalues = eigenvalues.ravel() 
alphaa = alphaa.ravel() 
normCostTrain = np.random.random((len(alpha_list), len(eigRange))).ravel() 

DatavmaxTrain = np.max(normCostTrain) 
DatavminTrain = np.min(normCostTrain) 

PuOr = plt.get_cmap('PuOr') 
ax.scatter(eigenvalues, alphaa, normCostTrain, 
      c = normCostTrain.ravel(), 
      s = 30, 
      cmap = PuOr, 
      vmin = DatavminTrain, 
      vmax = DatavmaxTrain, 
      alpha = 0.70 
      ) #-----for train 

m = cm.ScalarMappable(cmap = PuOr) 
m.set_array(normCostTrain) 

cb1 = plt.colorbar(m) 
cb1.set_label("normalized square error") 

plt.title("Train ") 
ax.set_xlabel("No. of Eigenvalues") 
ax.set_ylabel("Log(Regularization parameter)") 
ax.set_zlabel("normalized square error") 
plt.show() 

enter image description here

我不知道,如果這是一個進步。這些點有點混雜在一起,但如果您拖動鼠標來旋轉繪圖,則可以區分它們。

+0

謝謝!我應該早點嘗試一下!但是有沒有更適合我的問題更好的替代陰謀風格? – Moj

+0

@Moj:您可以嘗試使用[3D散點圖](http://stackoverflow.com/a/4739805/190597)。 – unutbu

+0

我試了一次,但不知道如何使用它或我的目的。你給我一些提示!我把ax.scatter(特徵值,alphas,c = normCostTrain,marker =「o」),但得到以下錯誤:' 文件「/usr/lib/pymodules/python2.7/mpl_toolkits/mplot3d/proj3d.py」 ,第184行,在vec_pad_ones中 vec = np.array([xs,ys,zs,np.ones((len(xs)))]]) ValueError:使用序列設置數組元素。', – Moj