Как мы обсуждали в предыдущем посте, линейная регрессия, часть 1
Мы используем множественную регрессию, когда имеется более одного набора входных функций, как утверждает уравнение:
Y=x0+(x1*w1+x2*w2+x3*w3+....+xn*wn)
где x1, x2, x3,… .xn - входные характеристики.
Однако в реальном мире непросто работать с двумерными данными, подобными этим, в простой линейной регрессии.
Я имею в виду?
2D-данные имеют оси X и Y, которые имеют один набор значений. Если вы посмотрите в предыдущем примере, набор данных HousePrice.csv содержит 8 столбцов. Но мы взяли два столбца: Цена (старые) - ›XAxis и Price (New) -› Y Axis. На основе этого мы создали нашу линейную модель. Однако это не реальный сценарий. В реальном мире набор данных может иметь несколько функций. Эти функции необходимы для правильного прогнозирования значения.
Вот что мы делаем: вместо того, чтобы рассматривать 2 из 8 столбцов, мы теперь рассматриваем все 8 столбцов (помните, что столбец даты не является функцией, это просто информация. Так что мы можем просто опустить это). Это оставляет нам 7 функций в качестве оси X и 1 функцию в качестве оси Y или целевое значение. Код приведен ниже. Для получения любой информации о множественной регрессии проверьте Часть линейной регрессии: 1
import pandas import numpy as np #load csv file df=pandas.read_csv('./DataSet/HousePrice.csv') print(df.describe()) df=df.drop(['Date'],axis=1) X=df[list(df.columns)[:-1]] Y=df[list(df.columns)[-1]] #print(X) #print(Y) from sklearn.model_selection import train_test_split xtrain,xtest,ytrain,ytest=train_test_split(X,Y,random_state=0) from sklearn.linear_model import LinearRegression reg=LinearRegression() reg.fit(xtrain,ytrain) print(list(reg.predict(xtrain))[:5]) print(reg.score(xtest,ytest))
Импорт файла CSV с помощью библиотеки Pandas:
df=pandas.read_csv('./DataSet/HousePrice.csv') print(df.describe())
Pandas .read_csv () читает файлы csv из определенного места. Есть и другие варианты. См .: Pandas.read_csv ()
Отбросьте ненужные данные (в этой таблице это столбец [«Дата»])
df.drop(['Date'],axis=1)
Это Функции, присутствующие в наборе данных после удаления «Дата».
[| Цена (все) | Изменить (все) | Цена (новая) | Изменить (новая) |
Цена (современная) | Изменить (современная) | Цена (более ранняя) | Изменить (более ранняя) | ]
Определить X (набор функций) и Y (цель)
X=df[list(df.columns)[:-1]] Y=df[list(df.columns)[-1]]
list () - ›Преобразует имена столбцов в формат списка.
[«Цена (все)», «Изменить (все)», «Цена (новая)», «Изменить (новая)», «Цена (современная)», «Изменить (современная)», «Цена (более ранняя)»]
[: -1] - ›означает до n-1-го элемента в списке
[: 1] - ›Только n-1-й элемент в lisy = t
Итак, Y или наша целевая функция становится «Цена (новая)», а оставшаяся часть становится нашим набором функций или X
X = ['Цена (все)', 'Изменить (все)', 'Цена (новая)', 'Изменить (новая) »,' Цена (современная) ',' Изменить (современная) ',' Цена (более ранняя) ']
Y = [Изменить (предыдущее)]
from sklearn.model_selection import train_test_split xtrain,xtest,ytrain,ytest=train_test_split(X,Y,random_state=0) from sklearn.linear_model import LinearRegression reg=LinearRegression() reg.fit(xtrain,ytrain)
TrainTestSplit делит набор данных на 75% обучающих 25% тестовых данных
xTrain, xTest, yTrain, yTest = train_test_split (X, Y)
LinearRegression (). fit (X, Y) - ›помещает значения x и y в заданную функцию соответственно
Lreg = LinearRegression (). Fit (xTrain, yTrain)
Измерение точности
reg.predict(xTest) Lreg.score(xTest,yTest)
Методы .score (прогнозируемое значение, ось Y тестовых данных) возвращают показатель точности или процент совпадения прогнозируемого и фактического значений.
.predict (ось x тестовых данных) возвращает список прогнозируемых значений каждого элемента в xTest.
ВЫВОД:
[«Цена (все)», «Изменить (все)», «Цена (новая)», «Изменить (новая)», «Цена (современная)», «Изменить (современная)», «Цена (более ранняя)»]
[32,811615948902435, 9,949265286326835, 31,495573493573865, 9,55246290821825, 2,734303573555142]
Оценка точности: 0,9900852129223513
Как видите, показатель точности составляет 99%.
Я подумал о включении сюда полиномиальной регрессии. Но он заслуживает отдельного поста. Итак, я покажу еще один пример множественной регрессии с использованием бостонского набора данных.
#Code for Boston DataSet from sklearn.datasets import load_boston from sklearn.linear_model import LinearRegression from sklearn.model_selection import train_test_split boston = load_boston() X = boston.data print(type(X)) print(boston.keys()) print('Feature names:',boston['feature_names']) Y = boston.target X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.33, shuffle= True) lineReg = LinearRegression() lineReg.fit(X_train, y_train) print(lineReg.score(X_test, y_test ))
Загрузить набор данных Boston из наборов данных Scikit-Learn:
from sklearn.datasets import load_boston boston=load_boston()
Определите X и Y и изучите DataSet
print(type(X)) print(boston.keys()) print('Feature names:',boston['feature_names']) X = boston.data Y = boston.target
Когда вы дадите boston.keys () - ›, это вернет основные функции бостонских данных.
dict_keys ([‘feature_names’, ‘DESCR’, ‘target’, ‘data’])
‘Feature_names’ - ›название объекта или столбцы набора данных или, проще говоря,« X »
‘DESCR’ - ›описание каждой функции
‘Target’ - ›целевое значение или« Y »
‘Data’ - ›значения данных
print('Feature names:',boston['feature_names']) print('DESCR:',boston['DESCR']) print('Target ':',boston['target']) print('data:',boston['data'])
Та же старая и та же старая линейная регрессия
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.33, shuffle= True) lineReg = LinearRegression() lineReg.fit(X_train, y_train) print(lineReg.score(X_test, y_test ))
Попробуйте сами
Следуйте за мной на YouTube: учебники по Python и продвинутое программирование на Python
Следите за моим блогом