2016-07-07 6 views
0

Ich arbeite durch ein Tutorial in Scikit-lernen, und ein Abschnitt erstellt ein Dataset. Dies ist:Scikit-learn Dataset Maker akzeptiert keine Befehlszeilenargumente

#Generate the example datapoints, red and blue. 
X, t = sklearn.datasets.make_circles(n_samples=100, shuffle=False, factor=0.3, noise=0.1) 
T = np.zeros((100,2)) 
T[t==1,1] = 1 
T[t==0,0] = 1 

#Seperate the datapoints by color. 
x_red = X[t==0] 
x_blue = X[t==1] 
print ('shape of X: {}'.format(X.shape)) 
print ('shape of T: {}'.format(T.shape)) 

#Plotstuff 
plt.plot(x_red[:,0], x_red[:,1], 'ro', label='class red') 
plt.plot(x_blue[:,0], x_blue[:,1], 'bo', label='class blue') 
plt.grid() 
plt.legend(loc=1) 
plt.xlabel('$x_1$', fontsize=15) 
plt.ylabel('$x_2$', fontsize=15) 
plt.axis([-1.5, 1.5, -1.5, 1.5]) 
plt.title('red vs. blue classes in the input space') 
plt.show() 

Macht eine völlig normale chart.

Allerdings, wenn ich es Befehlszeileneingaben zu akzeptieren ändern:

try: 
     in1 = (int(float(sys.argv[1]))) 
     in2 = (int(float(sys.argv[2]))) 
     in3 = (int(float(sys.argv[3]))) 
     in4 = (int(float(sys.argv[4]))) 
    except IndexError: 
     print(
     "The program is run as: program.py a b c d \n" 
     "a = Random seed\n" 
     "b = Number of samples\n" 
     "c = Factor\n" 
     "d = Noise\n" 
     "Example: python JISIDF-[01].py 1 100 0.3 0.1") 
     raise SystemExit 

    np.random.seed(seed=in1) 
    #Generate the example datapoints, red and blue. 
    X, t = sklearn.datasets.make_circles(n_samples=in2, shuffle=False, factor=in3, noise=in4) 

Auch wenn die Eingänge sind die gleichen:

[email protected]:~/Code/Tutorials/Peterrolelant$ python3 PeterNet-17.py 1 100 0.3 0.1 

Ich erhalte eine Fehlermeldung:

Traceback (most recent call last): 
     File "PeterNet-17.py", line 27, in <module> 
     X, t = sklearn.datasets.make_circles(n_samples=in2, shuffle=False, factor=in3, noise=in4) 
     File "/usr/local/lib/python3.4/dist-packages/sklearn/datasets/samples_generator.py", line 625, in make_circles 
     X += generator.normal(scale=noise, size=X.shape) 
     File "mtrand.pyx", line 1902, in mtrand.RandomState.normal (numpy/random/mtrand/mtrand.c:17755) 
    ValueError: scale <= 0 

Das war vorher ein Problem. Wie kann ich das beheben?

+1

'int (float (0,3))' und 'int (float (0,1))' sind auf '0' gleich. Sind Sie sicher, dass das beabsichtigt ist? – edwinksl

+0

Wenn ich die floats entferne, bekomme ich einen Wertfehler: 'ValueError: ungültiges Literal für int() mit Basis 10: '0.3'' – Rich

+0

So ist es das' in1 = (((sys.argv [1])))' ? Das gibt mir einen Typfehler: 'TypeError: Kann Array von dtype (' Rich

Antwort

1

Von http://docs.scipy.org/doc/numpy/reference/generated/numpy.random.seed.html und http://scikit-learn.org/stable/modules/generated/sklearn.datasets.make_circles.html, beachten Sie, dass seed und n_samplesint s sein müssen, während noise und factordouble sein müssen.

Das Hauptproblem mit Ihrem aktuellen Typ-Casting ist, dass in4 = int(float(sys.argv[4])) auf 0 auswertet, weil int(float('0.1'))-0 auswertet, aber noise (und scale) wird erwartet, dass sie größer als 0. Aus diesem Grund ist die Zurückverfolgungs ValueError: scale <= 0 sagt. Aus dem gleichen Grund wird auch int(float(sys.argv[3])) zu 0 ausgewertet, aber Sie haben wahrscheinlich beabsichtigt, dass es 0,3 ist. Daher ist die Lösung in beiden Fällen das Entfernen des int Castings.

Das andere kleinere Problem ist, dass Sie nur direkt in1 = int(sys.argv[1]) tun können, und in2 = int(sys.argv[2]), ohne zuerst die sys.argv[1] und sys.argv[2] Saiten float s zu Gießen.

daher zusammenfassend Sie diese stattdessen tun sollten:

in1 = int(sys.argv[1]) 
in2 = int(sys.argv[2]) 
in3 = float(sys.argv[3]) 
in4 = float(sys.argv[4]) 
+0

Ausgezeichnet. Speichern Sie dies. – Rich

Verwandte Themen