Понимание множественной линейной регрессии - PullRequest
0 голосов
/ 11 февраля 2019

Я делаю проблему множественной регрессии.У меня есть нижеприведенный набор данных, как показано ниже.

rank--discipline--yrs.since.phd--yrs.service--sex--salary
[  1           1             19           18    1  139750],......

Я беру зарплату как зависимую переменную, а другую переменную - как независимую переменную.После предварительной обработки данных я запустил модель градиентного спуска, регрессионную модель.Я оценил смещение (перехват), коэффициент для всех независимых функций.Я хочу сделать разбросанный график для фактических значений и линии регрессии для гипотезы, которую я предсказал.Так как у нас здесь более одного объекта,

У меня есть следующие вопросы.

  1. При построении фактических значений (рассеянный график), как мне решить ось Xценности.Смысл, у меня есть список значений.например, первая строка [1,1,19,18,1] => 139750 Как преобразовать или отобразить [1,1,19,18,1] по оси X.?Мне нужно как-то сделать [1,1,19,18,1] в одно значение, чтобы я мог отметить точку (x, y) на графике.

  2. При построении линии регрессии, какими будут значения признаков, чтобы я мог рассчитать значение гипотезы.?То есть теперь у меня есть перехват и вес всех объектов, но у меня нет значений объектов.Как мне принять решение о значениях характеристик сейчас .?

Я хочу рассчитать баллы и использовать matplot для выполнения заданий.Я знаю, что есть много инструментов, доступных снаружи, включая matplotlib для выполнения этой работы.Но я хочу получить базовое понимание.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

что вы можете сделать, это ->

from pandas import plotting as pdplt

pdplt.scatter_matrix(dataframe, pass the remaining required parameters)

, тем самым вы получите матрицу графиков (в вашем случае это 6X6), которая точно покажет, как каждый столбец в вашем фрейме данных связан с другими столбцамии вы можете четко визуализировать, какая функция доминирует в результате, а также как эти функции соотносятся друг с другом.Если вы спросите меня, это первое, что я использовал для решения проблем такого типа, а затем удалил все коррелированные объекты и выбрал объекты, которые наилучшим образом приближаются к выходу.

Но так как вам нужно построить 2d график иПри описанном выше подходе вы можете получить больше, чем одну особенность, которая доминирует на выходе, тогда вы можете создать чудо по имени PCA.Если вы спросите меня, PCA - одна из самых красивых вещей в машинном обучении.Что он будет делать, так это каким-то образом объединит всех ваших поклонников в каком-то волшебном соотношении, что сгенерирует принципиальные компоненты для ваших данных.Основными компонентами являются те компоненты, которые определяют / вносят основной вклад в вашу модель.Вы применяете pca, просто импортируя из sklearn, а затем выбираете первый принципиальный компонент (так как вам нужен двухмерный график) или можете выбрать два базовых компонента и построить трехмерный график.Но всегда помните, что эти ценовые компоненты не являются реальными особенностями вашей модели, но они представляют собой некое волшебное сочетание, и то, как PCA сделал это, очень и очень интересно (с использованием таких понятий, как собственные значения и векторы), и вы также можете создавать свои собственные.

Помимо всего этого вы можете применить разложение по сингулярному значению (SVD) к вашей модели, которая является сущностью всей линейной алгебры, которая является типом разложения матрицы, существующего для всей матрицы.Для этого нужно разложить вашу матрицу на три матрицы, из которых диагональная матрица, состоящая из сингулярных значений (масштабный коэффициент) в порядке убывания, и что вам нужно сделать, это выбрать верхние значения единственного числа (в вашем случае только первоес наибольшей величиной) и построить обратно матрицу объектов из 5 столбцов в 1 столбец, а затем построить это.Вы можете сделать SVD, используя numpy.linalg

После того, как вы применили любой из этих методов, вы можете узнать свою гипотезу только с помощью одной наиболее важной выбранной функции и, наконец, построить график.Но учтите, что для построения двумерного графа следует избегать других важных функций, поскольку, возможно, у вас есть 3 главных компонента, каждый из которых имеет почти одинаковый вклад, и пусть три верхних единичных значения очень близки друг к другу.Поэтому примите мои слова и учтите все важные функции, и если вам нужна визуализация этих важных функций, используйте матрицу разброса

Summary ->

Все, что я хочу упомянуть, - это то, что вы можете сделатьтот же процесс со всеми этими вещами, а также может придумать вашу собственную статистическую или математическую модель для сжатия вашего пространства признаков.Но для меня я предпочитаю использовать PCA, и в таких случаях я даже сначала строю матрицу рассеяния, чтобы получить визуальную интуицию к данным.А также PCA и SVD помогают устранить избыточность и, следовательно, переоснащение.

Подробнее об остальном см. В документах.

Счастливое машинное обучение ...

0 голосов
/ 11 февраля 2019

Я все еще не уверен, что полностью понимаю ваш вопрос, поэтому, если что-то не так, как вы ожидали, прокомментируйте ниже, и мы решим это.

Теперь,

Запрос 1: Во всехВ ваших наборах данных у вас будет несколько входов, и у вас нет возможности просмотреть целевую переменную salary в вашем случае по отношению ко всем, на одном графике, что обычно делается, либо вы применяете концепцию уменьшения размерности на своемданные, используя t-sne ( ссылка ) или вы используете анализ основных компонентов (PCA) , чтобы уменьшить размерность ваших данных и сделать свой вывод функцией двух или трех переменных, а затемнанесите его на экран, другой метод, который я предпочитаю, это скорее построить target против каждой переменной в отдельности как подзаговор . Причина этого в том, что у нас даже нет способа понять, как мы увидимданные в более чем трех измерениях.

Запрос 2: Если вы не решили использовать matplotlib, я предложу seaborn.regplot(), ноЭто также делается в matplotlib.Предположим, что переменная, которую вы хотите использовать первой, это «дисциплина» против «зарплата».

from sklearn.linear_model import LinearRegression
lm = LinearRegression()
X = df[['discipline']]
Y = df['salary']
lm.fit(X,Y)

После выполнения этого lm.coef_ даст вам коэффициент, а lm.intercept_ даст вам перехват влинейное уравнение, которое формирует эту переменную, тогда вы можете легко построить данные между двумя переменными и линией, используя matplotlib.

...