2017-08-28 6 views
4

機械学習について知りたいと思っていました。彼のUdacityのビデオを見て、いくつかのことを試してみたかった。参照でSklearnと線形回帰を使用するとエラーが発生しました:形状(1,16)と(1,1)が整列していません:16(dim 1)!= 1(dim 0)

彼のビデオ:彼のビデオでhttps://www.youtube.com/watch?v=vOppzHpvTiQ&index=1&list=PL2-dafEMk2A7YdKv4XfKpfbTH5z6rEEj3

、彼は彼がインポートされ、読みtxtファイルを持っていたが、私はtxtファイルを再作成しようとしたときに、それを正しく読み込むことがcouldntの。代わりに、私は同じデータを持つpandasデータフレームを作成して線形回帰/予測を実行しようとしましたが、次に私は以下のエラーを受け取りました。

一貫性のないサンプル数の入力変数が見つかりました。[1、16]と1d配列を渡すものがあり、それらを再形成する必要があります。

その後、私はこの記事次のようにそれらを再構築しようとしたとき:Sklearn : ValueError: Found input variables with inconsistent numbers of samples: [1, 6]

私はこのエラーを取得します....

形状(1,16)と(1,1)に整列していない:16( dim 1)!= 1(dim 0)

これは以下のコードです。私はそれがおそらく構文エラーであることを知っている、私はまだこのscklearnに精通していないといくつかの助けを欲しいです。

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

#DF = pd.read_fwf('BrainBodyWeight.txt') 
DF = pd.DataFrame() 
DF['Brain'] = [3.385, .480, 1.350, 465.00,36.330, 27.660, 14.830, 1.040, 4.190, 0.425, 0.101, 0.920, 1.000, 0.005, 0.060, 3.500 ] 

DF['Body'] = [44.500, 15.5, 8.1, 423, 119.5, 115, 98.2, 5.5,58, 6.40, 4, 5.7,6.6, .140,1, 10.8] 

try: 
    x = DF['Brain'] 
    y = DF['Body'] 

    x = x.tolist() 
    y = y.tolist() 

    x = np.asarray(x) 
    y = np.asarray(y) 


    body_reg = linear_model.LinearRegression() 
    body_reg.fit(x.reshape(-1,1),y.reshape(-1,1)) 
    plt.scatter(x,y) 
    plt.plot(x,body_reg.predict(x)) 
    plt.show() 
except Exception as e: 
    print(e) 

sklearnが私の入力を好まない理由を誰でも説明できますか?

+0

をx.reshapeとは対照的に、私はなっておりません'plt.plot(x、body_reg.predict(x))'行にエラーが発生していますが、ここでは 'reshape(-1,1)'と 'x'を使って修正することができます。 –

答えて

1

documentation LinearRegression.fit()には、[n_samples,n_features]の形状のx配列が必要です。そのため、fitを呼び出す前に配列xを再形成しているのです。あなたが必要な[n_samples,n_features]形状を満たさない(16、)形状の配列を持っていないなら、n_featuresは与えられていないので、

x = DF['Brain'] 
x = x.tolist() 
x = np.asarray(x) 

# 16 samples, None feature 
x.shape 
(16,) 

# 16 samples, 1 feature 
x.reshape(-1,1).shape 
(16,1) 

同じ要件は、(とも一貫性のため)LinearRegression.predict機能のために行く、あなたは単に予測関数を呼び出すときに、同じ整形を行う必要があります。

plt.plot(x,body_reg.predict(x.reshape(-1,1))) 

あるいは、関数を呼び出す前にx配列を変形するだけで済みます。

そして機能参照のために、DF['Brain'].valuesを呼び出すだけで簡単に値の内側の配列を得ることができます。あなたはそれをリスト - > numpy配列にキャストする必要はありません。

x = DF['Brain'].values.reshape(1,-1) 
y = DF['Body'].values.reshape(1,-1) 

body_reg = linear_model.LinearRegression() 
body_reg.fit(x, y) 
1

パンダのデータフレームは不要ですが、私はあなたがそのための十分な理由を持っていると仮定します:だから、あなただけのすべての変換の代わりにこれを使用することができます。遭遇しているエラーは、回帰アルゴリズムが特定の形状の数値配列を期待しているためです。私はこれもかなり新しいですが、これは私のために働いた。私はnp.reshape(Xと呼ばれる

注、( - 1,1)(1,1)

try: 
    x = np.reshape(np.array(DF['Brain']),(-1,1)) 
    y = np.array(DF['Body']) 
    body_reg = linear_model.LinearRegression() 
    body_reg.fit(x,y) 
    plt.scatter(x,y) 
    plt.plot(x,body_reg.predict(x)) 
    plt.show() 
except Exception as e: 
    print(e) 
scikitのバージョンが、使用している
+0

彼はxとyを 'fit()'に渡すときにそれをやっています。では、この答えは何を追加するのでしょうか? –

+0

私は、reshapeへの正しい呼び出しが、X値をパラメータとして渡したことを示していると考えました。 –

関連する問題