【问题标题】:why does change in data doesn't change the plot line?为什么数据的变化不会改变情节线?
【发布时间】:2019-09-10 22:45:30
【问题描述】:

我是机器学习的新手,我正在构建一个简单的线性回归模型。该模型的变量如下:

X_train = [3, 5, 3, 4, 8, 7, 1, 10, 3, 2, 6, 6, 4, 9, 2, 1, 7, 5, 4, 8]
X_test = [2, 10, 4, 4, 10, 9, 10, 4, 5, 8]
Y_train = [56642, 66029, 64445, 61111, 113812, 91738, 46205, 121872, 60150, 39891, 81363, 93940, 57189, 54445, 105582, 43525, 39343, 98273, 67938, 56957]
Y_test = [37731, 122391, 57081, 63218, 116969, 109431, 112635, 55794, 83088, 101302]

这是我的代码:

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

# Importing the dataset
dataset = pd.read_csv('Data.csv')
X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, 1].values

# Splitting the dataset into the Training set and Test set
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 1/3, random_state = 0)


#fitting simple linear regression on training sets
from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train, y_train)

#predicting the test set results
y_pred = np.array(regressor.predict(X_test))

这是我绘制图表的代码:

#visualizing data for the test set
plt.scatter(X_test, y_test, color = 'red')

#Method 1: Using regressor.predict(X_train)
plt.plot(X_train,regressor.predict(X_train), color = 'green')

#Method 2: Using regressor.predict(X_test)
plt.plot(X_test, regressor.predict(X_test), color='yellow')

plt.title('Experience v/s Salary')
plt.xlabel('Experience')
plt.ylabel('Salary')
plt.show()

这是我的图表的图像:

为什么plt.plot(X_train,regressor.predict(X_train), color = 'green')plt.plot(X_test, regressor.predict(X_test), color='yellow') 得到相同的回归线,即使regressor.predict(X_train)regressor.predict(X_test) 得到不同的结果?

【问题讨论】:

  • len of X_trainY_train 不匹配
  • 您的样本数据格式不正确。 X_train 有 19 个元素,Y_train 有 20 个元素,X_trainX_test 应该嵌套 lists。此外,您应该包括您的地块的图像。
  • @Akhilesh 这是一个打字错误。我没有创建数据集,但下载了它。我只是使用train_test_split 将数据集划分为训练集和测试集
  • @gmds 为什么 X_train 和 X_test 应该是嵌套列表?我使用train_test_split 将数据分为训练集和测试集。此外,我无处可循的课程告诉我,这两个数组都需要嵌套才能使模型工作。因此,如果您能提供更多详细信息,将会很有帮助。

标签: python machine-learning linear-regression


【解决方案1】:

LinearRegression 模型实际上只是学习一条直线。对于任何输入,它将输出映射到该直线上的一个点。无论输入如何,您都会得到同一条线,您将始终在那条线上得到一个点!

在拟合后查看regressor.intercept_regressor.coef,这将显示 y 轴上的截距(从该图中可能大约为 36000),以及线的梯度(可能是 10000?)。

【讨论】:

  • 如果我弄错了,请纠正我。所以回归器会取任意输入值,在不改变斜率的情况下,根据直线的斜率标记y坐标。这是你的意思吗?
  • 是的,完全正确。在您的情况下(我相信),它采用经验值乘以系数(m,梯度),并添加截距(c,它与 y 相交轴)。通过这种方式,所有 x 值都映射到这条线上,无论它们是训练还是测试。要更改斜率,您需要使用不同的数据重新训练模型。
【解决方案2】:

因为我们通常在火车数据上train 我们的model。和model learns 来自train data only,我们假设test datasample,仅与train data 非常相似。我们在上面应用predict

在您的场景中,只有一个模型regressor.fit(X_train, y_train),它有它的interceptslope,它是固定的。 (简单来说,有一条线不会改变,它只能向它的方向扩展,即使是随机的未知样本也会形成一条与你的黄线和绿线重叠的线)

【讨论】:

    猜你喜欢
    • 2020-03-25
    • 2019-10-17
    • 1970-01-01
    • 2013-10-29
    • 2021-04-09
    • 2022-10-18
    • 1970-01-01
    • 2016-10-29
    • 2016-05-27
    相关资源
    最近更新 更多