Зачем заменять отсутствующие значения на -9999?

#python-3.x #linear-regression #missing-data

#python-3.x #линейная регрессия #отсутствуют данные

Вопрос:

Код для модели линейной регрессии с помощью numpy:

 from statistics import mean
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import random
from sklearn.linear_model import LinearRegression

def create_dataset(hm, variance, step=2, correlation=False):
    val = 1
    ys = []
    for i in range(hm):
        y = val   random.randrange(-variance, variance)
        ys.append(y)
        if correlation and correlation == 'pos':
            val  = step
        elif correlation and correlation == 'meg':
            val -= step
    xs = [i for i in range(len(ys))]

    return np.array(xs, dtype=np.float64), np.array(ys, dtype=np.float64)

def best_fit_slope_and_intercept(X, y):
    x_mean = mean(X)
    y_mean = mean(y)
    gradient_calc1 = x_mean * y_mean - mean(X * y)
    gradient_calc2 = x_mean ** 2 - mean(X ** 2)
    gradient = gradient_calc1 / gradient_calc2
    intercept = y_mean - gradient * x_mean
    return gradient, intercept


def r_squared(gradient, intercept, xs, ys):
    the_mean = mean(ys)
    regression_y = [gradient * x   intercept for x in xs]
    total_error = (abs(ys - the_mean) ** 2).sum()
    explained_error = (abs(ys - regression_y) ** 2).sum()
    return 1 - explained_error / total_error

xs, ys = create_dataset(100, 1000, 10, 'pos')
m, b = best_fit_slope_and_intercept(xs, ys)
regression_line = [m * x   b for x in xs]

regressor = LinearRegression()
regressor.fit(xs.reshape(-1, 1), ys)

prediction = regressor.predict(xs.reshape(-1, 1))
print(r_squared(m, b, xs, ys))
plt.scatter((xs), ys)
plt.plot(xs, regression_line)
plt.plot(xs, prediction)
plt.show()
  
  1. В связи с этим кто-нибудь может сказать мне, почему я должен заменять отсутствующие значения на -9999, как это сделал sentdex в своем руководстве?

В связи с этим sentdex сказал, что большинство алгоритмов распознают такие входные данные как выбросы? Существует ли для этого конкретный дескриптор или математика предотвращает негативное влияние выбросов на регрессию.

  1. Этот метод используется в библиотеках машинного обучения для реализации линейной регрессии или используются другие концепции.

Видео о линейной регрессии с нуля:https://www.youtube.com/watch?v=QUyAFokOmowamp;list=PLQVvvaa0QuDfKTOs3Keq_kaG2P55YRn5vamp;index=11

Ответ №1:

  1. Замена всех ваших пропущенных значений на 0 или -9999 помогает удалить числа NaN и тем самым повысить эффективность нормализации вашего набора данных (если вы нормализуете свой набор данных). Кроме того, установка чисел NaN как -9999 помогает вашему коду рассматривать это значение как выброс . Нажмите здесь для получения дополнительной информации!
  2. Да, линейная регрессия — это метод, используемый в машинном обучении . Существует множество других процессов, таких как деревья решений!

Комментарии:

1. 2. Я спрашивал, использует ли реализация LinearRegression ту же концепцию, что и в коде в вопросе?

2. Прошу прощения за неправильное понимание вопроса! Да, та же концепция используется @Dr.danks, однако существуют и другие методы.