y = groupall.values[:, 2:] x = range(np.shape(y)[1]) plt.plot(x, y[0], "b.") x2 = np.array(x).reshape(-1,1) y2 = np.array(y[0]).reshape(-1,1) plt.plot(x2, y2, "r.") sgd_reg2 = SGDRegressor(n_iter_no_change=5000, penalty=None, eta0=0.1, random_state=42, max_iter=100000) sgd_reg2.fit(x2, y2.ravel()) y_predict = sgd_reg2.predict(x2) plt.plot(x2, y_predict, "y-") print(y_predict) 程序員
注意,一旦我把 eta0=0.1改成0.2以後,圖形便失真了: 數組
x=[[1],[2],[3],[4],[5]] y=[[1],[2],[3],[4],[5]] x=[1,2,3,4,5] y=[1,2,3,4,5] plt.plot(x, y, "b.") sgd_reg = SGDRegressor(n_iter_no_change=5000, penalty=None, eta0=0.5, random_state=42, max_iter=100000) x_reshape = np.array(x).reshape(-1,1) y_reshape = np.array(y).reshape(-1,1) print("x_re:", x_reshape) print("y_re:", y_reshape) sgd_reg.fit(x_reshape, y_reshape) y_predict = sgd_reg.predict(x_reshape) plt.plot(x_reshape, y_predict, "y-") 函數
這是一段代碼想要說明,對於plot畫圖而言x,y兩種形式:一種shape是(5,1),另一種是(5,)),暫且稱之爲矩陣類型,一種是列表類型,二者都是能夠的;可是對於學習器的fit函數而言,必定是要矩陣形式;列表形式轉爲矩陣類型須要使用reshape來作。 學習
reshape這裏我要多說一句,正常第一個參數表明要分割爲多少個元素,第二個表明要每一個元素裏面有幾個維度;在數組角度就是一維數組和二維數組的維度數;這裏有一個特殊值-1,表明忽略指定,根據另一個維度來自動進行計算: blog
arr = np.arange(6) brr = arr.reshape((2,-1)) print(brr) brr = arr.reshape((-1,3)) print(brr) brr = arr.reshape((2,3)) print(brr) it
上述代碼中第一段表明arr要被分爲兩個元素,維度據此計算;第二段代碼指定每一個元素維度是3,劃分幾個numpy.array自動算;第三段代碼就比較苦逼,是程序員本身來算,其實已經沒有第三段的必要了。sso