2016-04-13 2 views
2

Ich folge in einem ML-Lehrbuch: Mastering Machine Learning mit scikit-lernen, und während mein Code mir die richtigen Antworten gibt, tut es nicht Passt zu dem, was in dem Buch steht.Zeigen Sie eine Zeile in Matplotlib, so dass meine Ergebnisse mit meinem Lehrbuch übereinstimmen

Zuerst gibt es mir diesen Code:

import matplotlib.pyplot as plt 
X = [[6], [8], [10], [14], [18]] 
y = [[7], [9], [13], [17.5], [18]] 
plt.figure() 
plt.title('Pizza price plotted against diameter') 
plt.xlabel('Diameter in inches') 
plt.ylabel('Price in dollars') 
plt.plot(X, y, 'k.') 
plt.axis([0, 25, 0, 25]) 
plt.grid(True) 
plt.show() 

Was mir diese Grafik in matplotlib gibt:

enter image description here

Und das paßt mit meinen Ergebnissen.

jedoch im nächsten Schritt gibt mir diesen Code:

from sklearn.linear_model import LinearRegression 
# Training data 
X = [[6], [8], [10], [14], [18]] 
y = [[7], [9], [13], [17.5], [18]] 
# Create and fit the model 
model = LinearRegression() 
model.fit(X, y) 
print 'A 12" pizza should cost: $%.2f' % model.predict([12])[0] 

Und diese Grafik:

enter image description here

Das chard mit meinem Code nicht nach oben übereinstimmt, es doesn‘ t haben die Matplotlib-Chart-Maker-Funktion. Ich habe versucht, Führer zu lesen und meine eigenen machen:

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


X = [[6], [8], [10], [14], [18]] 
y = [[7], [9], [13], [17.5], [18]] 


model = LinearRegression() 
model.fit(X, y) 

z = np.array([12]).reshape(-1,1) 

print ('A 12" pizza should cost: $%.2f' % model.predict(z)[0]) 
print ("\n" + "_" * 50 + "\n") 

plt.figure() 
plt.title('Pizza price plotted against diameter') 
plt.xlabel('Diameter in inches') 
plt.ylabel('Price in dollars') 
plt.plot(X, y, z, 'k.') 
plt.axis([0, 25, 0, 25]) 
plt.grid(True) 
plt.show() 

Aber das gab mir nur dieses seltsames blaues Ding:

enter image description here

Ich bin neu in der Arbeit mit Mathematik in Python, also wenn jemand Könnte mir mehr Informationen geben, wie man das löst, würde es geschätzt.

+0

wie ist das Buch "Mastering Maschinelles Lernen mit Scikit-Learn" ist es für Sie hilfreich? – adhg

+0

So. Viele. Fehler. – Rich

+0

Wirklich? Ich war auf der Suche nach einem Buch in ML mit Scikit; schade – adhg

Antwort

1

Dieses "seltsame blaue Ding", das Sie bekommen, ist Ihre Daten, die durch Liniensegmente zusammengefügt werden; Ihre Daten sollten mit plt.scatter geplottet werden, was Ihnen eine Wolke von Punkten gibt.

Ihre Berechnung der Regressionsgeraden ist richtig, was repariert werden muss, ist, wie diese Zeile über den Datensatz zeichnen:

Nach der Datenanpassung, müssen Sie die Werte extrahieren notwendig, um die Regressionslinie zu ziehen ; Die Daten, die Sie benötigen, sind zwei Punkte an jedem Ende der X-Achse (hier x=0 und). Wenn wir model.predict über diese beiden Werte aufrufen, erhalten wir die entsprechenden Vorhersagen. Diese X-Werte bilden zusammen mit ihren entsprechenden Vorhersagen zwei Punkte, die wir verwenden werden, um die Linie zu zeichnen.

Zuerst extrahieren wir die vorhergesagten Werte y0 und . Wir verwenden dann plt.plot mit den Punkten (0, y0) und (25, y25), um die Regressionslinie grün zu zeichnen.

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


X = [[6], [8], [10], [14], [18]] 
y = [[7], [9], [13], [17.5], [18]] 


model = LinearRegression() 
model.fit(X, y) 

z = np.array([12]).reshape(-1,1) 

print ('A 12" pizza should cost: $%.2f' % model.predict(z)[0]) 
print ("\n" + "_" * 50 + "\n") 

plt.figure() 
plt.title('Pizza price plotted against diameter') 
plt.xlabel('Diameter in inches') 
plt.ylabel('Price in dollars') 
plt.scatter(X, y, z, 'k') 

y0, y25 = model.predict(0)[0][0], model.predict(25)[0][0] 
plt.plot((0, 25), (y0, y25), 'g') 

plt.axis([0, 25, 0, 25]) 
plt.grid(True) 
plt.show() 

enter image description here

+0

Wenn Sie die Markierungen nicht nach Größe oder Farbe skalieren, verwenden Sie plot ohne Linie. Ex 'ax.plot (x, y,' o ') 'ergibt eine etwas bessere Leistung (nur wenn Sie viele Punkte haben). – tacaswell

+0

Können Sie Aufrufe nicht "vorhersagen"? – tacaswell

+1

Ok, es funktioniert jetzt. Vielen Dank. – Rich

Verwandte Themen