使用scikit-learn LinearRegression绘制线性拟合

时间:2016-12-02 22:04:12

标签: numpy matplotlib scikit-learn curve-fitting

我正在尝试制作线性回归模型,用父亲的长度预测儿子的长度

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'

第二件事是计算儿子的平均长度和平均值的标准误差?

3 个答案:

答案 0 :(得分:12)

这里有两个主要问题:

  1. 从源中获取数据
  2. 将数据转换为sklearn.LinearRegression.fit理解的形状
  3. <强> 1。获取数据
    源文件包含带有列名称的标题行。我们不希望在数据中使用列名,因此在将整个数据读入数据框system("scp", "file", "server:"); 后,我们可以告诉它使用第一行作为标题 df。这允许稍后通过列名称查询数据帧,例如df.head()

    <强> 2。使数据成形
    sklearn.LinearRegression.fit有两个参数。首先是“训练数据”,它应该是2D阵列,其次是“目标值”。在这里考虑的情况下,我们只是简单地做了什么,所以我们不太关心这些概念,但我们需要将该函数的第一个输入带入所需的形状。这可以通过为其中一个数组创建新轴(即df['Father']

    )轻松完成

    完整的工作机会:

    df['Father'].values[:,np.newaxis]

    enter image description here

答案 1 :(得分:1)

我一直在寻找同一问题的答案,但初始数据集 URL 不再有效。 “父/子”皮尔逊高度数据集 csv 可以从以下 URL 中检索,然后只需要进行一些小的调整即可如广告所示(注意 .csv 文件的重命名):

http://www.randomservices.org/random/data/Pearson.html

import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
import seaborn as sns
import csv

from sklearn.linear_model import LinearRegression

# data retrieved from http://www.randomservices.org/random/data/Pearson.html#

df = pd.read_csv('./pearsons_height_data.csv',
                 quotechar='"',
                 quoting=csv.QUOTE_ALL)

df.head() # produce 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()

答案 2 :(得分:-1)

加载数据时,请改为:

df = pd.read_csv('http://www.math.uah.edu/stat/data/Pearson.txt', 
                 delim_whitespace=True)
df.columns = Headings_cols

您还应确保X形状正确:

X = df['Father'].values.reshape(-1, 1)