почему изменение данных не меняет сюжетную линию? - PullRequest
4 голосов
/ 21 апреля 2019

Я новичок в машинном обучении и строю простую модель линейного восстановления.Переменные для модели следующие:

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()

Вотизображение моего графика:

Image for the question

Почему я получаю одну и ту же линию регрессии для 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)?

Ответы [ 2 ]

0 голосов
/ 23 апреля 2019

потому что мы обычно train наши model на данных поезда.и model learns из train data only, и мы предполагаем, что test data - это sample, который очень похож только на train data.и мы применяем predict к нему.

В вашем сценарии есть только одна модель regressor.fit(X_train, y_train), у которой есть intercept и slope, и она исправлена.(простыми словами есть линия, которая не изменится, она может только расширяться в своем направлении, даже случайный неизвестный образец сделает линию, которая будет перекрывать вашу желтую и зеленую линии)

0 голосов
/ 22 апреля 2019

Модель LinearRegression буквально учится по прямой линии. Для любого входа он отобразит результат в точку на этой прямой линии. Вы получите ту же строку, что и независимо от ввода, вы всегда получите точку на этой строке!

Посмотрите на regressor.intercept_ и regressor.coef после подгонки, это покажет пересечение по оси y (вероятно, около 36000 от этого графика) и градиент линии (возможно, 10000, может быть?).

...