2016-09-18 11 views
0

私はPythonで遊んでいて、matplotlibで二次線形回帰をプロットしたいと思います。matplotlibでプロット二次関数/モデル

Plot

Zoomed plot

通常、私はこれが対行に問題があることを考えるでしょう。問題は、私のプロットは、接続されたライン/ドットの代わりに、ただ一つの機能の多くなってしまうということであり、列ベクトル。しかし、私は転置すると何も変わっていないようです。

は、ここに私のコードです:私は

from sklearn import datasets, linear_model 
import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 

# Load diabetes dataset JSON 
dsDiabetes = datasets.load_diabetes() 

# Create feature- and outcome vectors 
lin_train = np.array(dsDiabetes.data[:, np.newaxis, 2]) 
quad_train = np.concatenate((lin_train, lin_train**2), axis=1) 
outcome = np.array(dsDiabetes.target) 

# Create regression objects 
lin_model = linear_model.LinearRegression() 
quad_model = linear_model.LinearRegression() 

# lin_train model 
lin_model.fit(lin_train, outcome) 
quad_model.fit(quad_train, outcome) 

# Plot 
plt.style.use('fivethirtyeight') 
plt.scatter(lin_train, outcome, color='black') 
# plt.plot(lin_train, quad_model.predict(quad_train)) 
# plt.plot(lin_train, lin_model.predict(lin_train), color='blue', linewidth=1) 
plt.plot(lin_train, quad_model.predict(quad_train), color='red', linewidth=1) 
plt.show() 

何をしないのですか?

答えて

0

値を並べ替える必要があります。あなたはどんなアプローチをとることもできます。個人的には、私はちょうどpandasを使用しますが、確かに軽量のソリューションがあります。もちろん

>>> df = pd.DataFrame({'x':lin_train.reshape((lin_train.shape[0],)), 'y':quad_model.predict(quad_train)}) 
>>> df.sort_values(by='x', inplace=True) 
>>> plt.style.use('fivethirtyeight') 
>>> plt.scatter(lin_train, outcome, color='black') 
<matplotlib.collections.PathCollection object at 0x7f6bf2906590> 
>>> # plt.plot(lin_train, quad_model.predict(quad_train)) 
... # plt.plot(lin_train, lin_model.predict(lin_train), color='blue', linewidth=1) 
... plt.plot(df.x, df.y, color='red', linewidth=1) 
[<matplotlib.lines.Line2D object at 0x7f6bf29069d0>] 

enter image description here

+0

!感謝juanpa。 簡単な質問:なぜあなたは変身しますか?私はテストしました、そして、それは必要です。 (442L、1L)と (442L、)の直感的な違いは何ですか? – mfvas

+0

@mfvasよろしくお願いします!これが助けになった場合は、回答をアップヴォートすることができ、受け入れる場合は、チェックマークを使用します。 –

0

プロットのx値は昇順でソートされていません。プロットは、何をすべきかを行い、ドットを結びつけますが、x軸上で線が「戻る」と「前に」飛ぶような順序です。さて、線形プロットでは、すべてが1行になっているのを見ることはできませんが、二次関数では可視になり始めます。行に使用するポイントを昇順のx値に基づいて並べ替えると、それを行う必要があります。

関連する問題