#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()
- В связи с этим кто-нибудь может сказать мне, почему я должен заменять отсутствующие значения на -9999, как это сделал sentdex в своем руководстве?
В связи с этим sentdex сказал, что большинство алгоритмов распознают такие входные данные как выбросы? Существует ли для этого конкретный дескриптор или математика предотвращает негативное влияние выбросов на регрессию.
- Этот метод используется в библиотеках машинного обучения для реализации линейной регрессии или используются другие концепции.
Видео о линейной регрессии с нуля:https://www.youtube.com/watch?v=QUyAFokOmowamp;list=PLQVvvaa0QuDfKTOs3Keq_kaG2P55YRn5vamp;index=11
Ответ №1:
- Замена всех ваших пропущенных значений на 0 или -9999 помогает удалить числа NaN и тем самым повысить эффективность нормализации вашего набора данных (если вы нормализуете свой набор данных). Кроме того, установка чисел NaN как -9999 помогает вашему коду рассматривать это значение как выброс . Нажмите здесь для получения дополнительной информации!
- Да, линейная регрессия — это метод, используемый в машинном обучении . Существует множество других процессов, таких как деревья решений!
Комментарии:
1. 2. Я спрашивал, использует ли реализация LinearRegression ту же концепцию, что и в коде в вопросе?
2. Прошу прощения за неправильное понимание вопроса! Да, та же концепция используется @Dr.danks, однако существуют и другие методы.