Как построить линейную регрессию между двумя непрерывными значениями? - PullRequest
0 голосов
/ 02 июня 2019

Я пытаюсь реализовать алгоритм машинного обучения для прогнозирования цен на жилье в Нью-Йорке.

Теперь, когда я пытаюсь построить (используя Seaborn ) взаимосвязь между двумя столбцами моего набора данных о ценах на жилье: 'gross_sqft_thousands' (общая площадь имущества в тысячах квадратных футов) и целевой столбец, который является 'sale_price_millions', я получаю странный график, подобный этому:

gross_sqft_thousands vs sale_price_millions

Код, используемый для построения:

sns.regplot(x="sale_price_millions", y="gross_sqft_thousands", data=clean_df);

Когда я пытаюсь построить график зависимости количества коммерческих единиц (столбец commercial_units) от sale_price_millions, я получаю странный график, подобный этому:

enter image description here

Эти странные графики, хотя в матрице корреляции sale_price очень хорошо коррелируют с обеими переменными (gross_sqft_thousands и commercial_units).

Что я делаю не так, и что я должен делать, чтобы получить отличный сюжет с меньшим количеством точек и четкой подгонкой, как этот сюжет:

great plot with fewer points

Вот часть моего набора данных:

enter image description here

1 Ответ

1 голос
/ 02 июня 2019

Ваш набор данных о цене на жилье намного больше, чем набор данных tips, показанный на этом примерном графике Seaborn, поэтому точечные диаграммы, сделанные с настройками по умолчанию, будут сильно переполнены.

Второй график выглядит «странно», потому что он отображает (практически) непрерывную переменную, цену продажи, против целочисленной переменной, total_units.

На ум приходят следующие решения:

  1. Уменьшите набор данных примерно до sns.regplot(x="sale_price_millions", y="gross_sqft_thousands", data=clean_df[::10]). Партия [::10] выбирает каждую 10-ю строку из clean_df. Вы также можете попробовать clean_df.sample(frac=0.1, random_state=12345), который случайным образом выбирает 10% всех строк без замены (используется случайное начальное число для воспроизводимости).

  2. Уменьшите альфа (непрозрачность) и / или размер точек рассеяния с помощью sns.regplot(x="sale_price_millions", y="gross_sqft_thousands", data=clean_df, scatter_kws={"alpha": 0.1, "s": 1}).

  3. Для графика 2 добавьте немного «джиттера» (случайного шума) к переменной оси y с помощью sns.regplot(..., y_jitter=0.05).

Для получения дополнительной информации ознакомьтесь с документацией Seaborn по regplot: https://seaborn.pydata.org/generated/seaborn.regplot.html

...