【问题标题】:How can I graph in using matplotlib/scikit learn?如何使用 matplotlib/scikit 学习绘图?
【发布时间】:2014-04-29 00:24:22
【问题描述】:

我正在尝试一些代码来制作学习曲线:

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 7)

from sklearn.linear_model import LinearRegression
estimator = LinearRegression()
estimator.fit(X_train, y_train)
y_predicted = estimator.predict(X_test)

fig = plt.figure()
plt.xlabel("Data")
plt.ylabel("MSE")
plt.ylim(-4, 14)
plt.scatter(X_train.ravel(), y_train, color = 'green')#<<<<<<<ERROR HERE
plt.plot(X_test.ravel(), y_predicted, color = 'blue')
plt.show()

结果:

ValueError: x and y must be the same size

打印X_trainy_train 形状输出:

(1317, 11)
(1317,)

我该如何解决这个问题?

【问题讨论】:

    标签: python python-2.7 matplotlib scikit-learn


    【解决方案1】:

    问题是您试图针对 1 维变量 (y) 绘制 11 维变量 (x)。您说您正在尝试绘制学习曲线。这意味着您正在迭代训练模型并在每次迭代(或 5 次迭代或其他)后显示错误。但这不是您要绘制的内容,您正在完全训练模型,然后尝试根据预测绘制输入(或 ravel() 对它们所做的任何事情)。这行不通。您需要重新考虑您要在这里实现的目标。

    【讨论】:

      【解决方案2】:

      如前所述,您正在尝试针对 2d 网格上的 11 个要素绘制响应变量,这显然行不通。我的以下建议都无法实现您的尝试,因为您的模型不是迭代学习,而是拆分、训练、测试。但是,如果您只想根据您的响应绘制每个连续的特征,您可以执行以下操作(我使用 pandas 来组织我的数据)

      data = DataFrame(np.random.normal(0,1, (1317, 11)), 
                           index=pd.date_range(
                           end= dt.datetime.utcnow(), 
                           periods=1317, freq='D'))
      
      features = ['feature_{}'.format(x) for x in 
                          range(len(data.columns))]
      
      data.columns = features
      data['result'] = data.mean(1) + np.random.randn()
      
      fig = plt.figure(figsize(10,10))
      ax = fig.add_subplot(111)
      
      for feature in features:
          ax.scatter(data[feature], data['result'], c=numpy.random.rand(3,1))  
      

      虽然我可能只是将您的模型 (y_predicted) 分散到 y 上以直观地验证我的模型。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-21
        • 2016-12-20
        • 2017-05-05
        • 2014-02-02
        • 2018-05-28
        • 2018-06-04
        • 2016-05-06
        • 1970-01-01
        相关资源
        最近更新 更多