父親の長さから息子の長さを予測する線形回帰モデルを作成しようとしています
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
import seaborn as sns
%matplotlib inline
from sklearn.linear_model import LinearRegression
Headings_cols = ['Father', 'Son']
df = pd.read_csv('http://www.math.uah.edu/stat/data/Pearson.txt',
delim_whitespace=True, names=Headings_cols)
X = df['Father']
y = df['Son']
model2 = LinearRegression()
model2.fit(y, X)
plt.scatter(X, y,color='g')
plt.plot(X, model.predict(X),color='g')
plt.scatter(y, X, color='r')
plt.plot(y, X, color='r')
エラーが発生します
ValueError: could not convert string to float: 'Father'
2つ目は、息子の平均の長さと平均の標準誤差を計算することです。
ここには2つの主要な問題があります。
sklearn.LinearRegression.fit
_ が理解できる形にデータを取得する1。データを取り出す
ソースファイルには、列名を含むヘッダー行が含まれています。データに列名を付けたくないので、データ全体をデータフレームdf
に読み込んだ後、最初の行をヘッダーとして使用するように指示できます。df.head()
。これにより、後で通常どおり列名、つまり_df['Father']
_でデータフレームをクエリできます。
2。データを形にする
_sklearn.LinearRegression.fit
_ は2つの引数を取ります。最初に「トレーニングデータ」(2D配列である必要があります)、次に「ターゲット値」。ここで検討するケースでは、単純に何を適合させるかということなので、概念についてはあまり気にしませんが、その関数への最初の入力を目的の形状にする必要があります。これは、配列の1つに新しい軸を作成することで簡単に実行できます。つまり、_df['Father'].values[:,np.newaxis]
_
完全に機能するスクリプト:
_import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
import seaborn as sns
from sklearn.linear_model import LinearRegression
df = pd.read_csv('http://www.math.uah.edu/stat/data/Pearson.txt',
delim_whitespace=True)
df.head() # prodce a header from the first data row
# LinearRegression will expect an array of shape (n, 1)
# for the "Training data"
X = df['Father'].values[:,np.newaxis]
# target data is array of shape (n,)
y = df['Son'].values
model2 = LinearRegression()
model2.fit(X, y)
plt.scatter(X, y,color='g')
plt.plot(X, model2.predict(X),color='k')
plt.show()
_