Ребята, сегодня мы рассмотрим множество полезных концепций, решая проблему прогнозирования CarPrice с использованием метода классификации линейной регрессии.

Проблема — числовые и категориальные данные вместе, как обучать данные?

  • Название автомобиля, тип топлива, стремление, номер двери …. все являются категориальными наборами данных, в то время как колесная база, длина автомобиля, ширина автомобиля и т. д. являются числовыми.

Задача состоит в том, чтобы предсказать цену автомобилей на основе данных с 24 столбцами с более чем 200 записями данных.

Если вы хотите просмотреть набор данных, перейдите сюда -›



Ограничение.Наше решение должно быть решено с использованием алгоритма линейной регрессии.

Что такое линейная регрессия?

Это простой поиск в Google, но позвольте мне сделать это как можно проще.

Видеть это >

Y=mX + C — это линейное уравнение, правильное простое (если вы не знаете, я рекомендую)

С точки зрения ML, Y = целевые данные, X = входные данные (все функции), m = коэффициент (средний квадратный корень) и C является постоянным (если линия пересекает точку, тогда C = 0).

График для X и Y выглядит как ›

Основная цель — найти линию наилучшего соответствия, которая минимизирует ошибку (ошибка — это сумма квадратов расстояния между точками и линией).

На рис. 2.1 показана ошибка линии от точек поперек плоскости XY, мы видим только 1 красную линию, которая является ошибкой 1-й точки.

Примечание. Общая ошибка представляет собой сумму всех пометок.

Допустим, это точки a,b,c, а затем расстояние между y=mx+c и точками ИЛИ ошибка суммируется, т.е. 5(расстояние от точки a) + 6 + 9 = 20 # Ошибка 1 = 20 единиц

Рисунок 2.2 — Другое уравнение Y=mX+C (линия), где ошибка изменилась.

Теперь снова ошибка расчета для a, b, c, допустим, ошибка 8 + 9 + 11 = 28 единиц. #Ошибка 2 = 28 единиц

Рисунок 2.3 — Другой Y=mX + C

Теперь снова ошибка вычисления для a,b,c, скажем, ошибка 3+1+(-7) = -3 единицы. #Ошибка 3= -3 единицы

Что происходит, когда мы получаем отрицательные значения по ошибке?

Теперь ошибка 1 = 20, ошибка 2 = 28 и ошибка 3 = -3, если бы нам нужно было выбрать лучшее Y=mX + C , наш ответ будет с ошибкой 20, хотя если бы ошибка 3 была +3, это было бы лучшим решением. . Следовательно, возводим все ошибки в квадрат и получаем

(28*28) › (20*20) › (-3)(-3) # Ошибка отсортирована сверху вниз

Ясно, что 784 > 400 > 9 и, следовательно, 9 является решением с наименьшей ошибкой, что делает линию на рис. 2.3 лучшим решением для нашего решения.

Подробное объяснение теории см. в блоге Четана Кумара.

___________________________________________________________________

Вернемся к проблеме. Теперь, когда мы знаем, что такое линейная регрессия, понимаем, что основными показателями для измерения алгоритма линейной регрессии являются квадрат ошибки и среднеквадратический коэффициент.

Об этом подробнее здесь >



Приступим к части кода. ура

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from pandas.plotting import scatter_matrix
from sklearn.preprocessing import scale
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
from sklearn.model_selection import train_test_split
from sklearn import preprocessing
import copy
#%matplotlib inline
#Read data into dataframe 
X=pd.read_csv('/Users/rohitmadan/Desktop/CarPrice/CarPrice_Assignment.csv')
Y=X.price #Target Variable 
X=X.drop(['price'],axis=1) #Input data
#Checking for null values or Datapreprocessing 
print('Null values in X',X.isnull().sum())
print('Null values in Y',Y.isnull().sum())
#No null values found 

Шаг 1 — Считайте данные в кадр данных

Шаг 2 — Отдельный вход (X) и цель (Y)

Шаг 3 — Проверьте, есть ли в данных пропущенные значения.

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

#Understanding the dataset 
print(‘Shape is’,X.shape)
print(‘Head is’,X.head())
print(‘Describing dataframe ‘,X.describe(include=’all’))

Шаг 4 — Понимание вашего набора данных с использованием формы, заголовка и описания.

Понимание взаимосвязи между набором данных с помощью визуализации

#Plot all relationship between dataset X using Pairplot
plt.rcParams[“figure.figsize”] = [16,9]
sns.set(style=”darkgrid”)
sns.pairplot(data=X) 
#Figure 3.1
scatter_matrix(X, alpha=0.5, figsize=(30,30), diagonal=’kde’,grid=’true’)
sns.set(rc={‘figure.figsize’:(11.7,8.27)})
sns.distplot(Y, bins=30)
plt.show() 
#Figre 3.2
#Plot Y in timeseries data
Y.plot()
#displot - Heat map and correlation matrix
correlation_matrix = X.corr().round(2)
sns.heatmap(data=correlation_matrix, annot=True)
#Figure 3.3

Рисунок 3.1 — Точечная диаграмма, показывающая взаимосвязь между наборами данных.

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



Шаг 5 — Установите взаимосвязь между наборами данных, используя диаграммы и графики.

Стандартизация наших тренировочных данных

Шаг 6 — Наш столбец CarName содержит такие данные, как —

alfa-romero giulia alfa-romero stelvio alfa-romero quadrifoglio audi 100 ls audi 100ls audi fox

Нам нужно извлечь 1-е название автомобилей из номера их модели для правильного кодирования помеченных данных, например, audi, BMW вместо audi q7 и т. д.

#Copying all categorical data into another dataframe using copy
Cat=X.select_dtypes(include=[‘object’]).copy(deep=’False’)
#Transposing or resizing Cat df
Cat=Cat.iloc[:, :].apply(pd.Series)
Name=Cat.CarName.copy()
#Splitting all values of CarName
Temp=[]
Temp=Name.str.split(pat=” “,expand=True)
Temp=Temp[0]
X.CarName=Temp
Cat.CarName=Temp

Шаг 7 — После того, как мы разделили все значения в столбце CarName и заменили их только первым именем автомобиля, т.е.

альфа-ромеро, ауди

Нам нужно стандартизировать или очистить данные (проверьте на наличие орфографических ошибок, таких как

Аудиди или Порше и т.д.

#Finding spelling mistakes
Cat.CarName.value_counts()
#Replacing bad spellings with right spellings
cleanup_nums = {“CarName”: { “maxda”: “mazda” , “porcshce”: “porsche” , “Nissan”:”nissan” , “vokswagen”:”volkswagen”, “toyouta” : “toyota”,”vw” : “volkswagen”} }
X.replace(cleanup_nums, inplace=True)

Шаг 8 — Кодирование

#print(X[‘doornumber’].value_counts())
cleanup_nums = {“doornumber”: {“four”: 4, “two”: 2},
 “cylindernumber”: {“four”: 4, “six”: 6, “five”: 5, “eight”: 8,
 “two”: 2, “twelve”: 12, “three”:3 }}
X.replace(cleanup_nums, inplace=True)
#OneHotEncoding using dummy method
L=X.copy(deep=’False’)
L=pd.get_dummies(L, columns=Cat.columns)

Сначала мы кодируем столбец имя двери и номер цилиндра, которые имеют значения -

четыре, два, шесть, восемь вместо 4,2,6,8

Затем мы используем метод OneHotEncoding для кодирования остальных наших размеченных данных, посткодирование, когда мы это делаем, X.columns мы получаем ›

Index([‘car_ID’, ‘symboling’, ‘doornumber’, ‘wheelbase’, ‘carlength’,
 ‘carwidth’, ‘carheight’, ‘curbweight’, ‘cylindernumber’, ‘enginesize’,
 ‘boreratio’, ‘stroke’, ‘compressionratio’, ‘horsepower’, ‘peakrpm’,
 ‘citympg’, ‘highwaympg’, ‘CarName_alfa-romero’, ‘CarName_audi’,
 ‘CarName_bmw’, ‘CarName_buick’, ‘CarName_chevrolet’, ‘CarName_dodge’,
 ‘CarName_honda’, ‘CarName_isuzu’, ‘CarName_jaguar’, ‘CarName_mazda’,
 ‘CarName_mercury’, ‘CarName_mitsubishi’, ‘CarName_nissan’,
 ‘CarName_peugeot’, ‘CarName_plymouth’, ‘CarName_porsche’,
 ‘CarName_renault’, ‘CarName_saab’, ‘CarName_subaru’, ‘CarName_toyota’,
 ‘CarName_volkswagen’, ‘CarName_volvo’, ‘fueltype_diesel’,
 ‘fueltype_gas’, ‘aspiration_std’, ‘aspiration_turbo’,
 ‘carbody_convertible’, ‘carbody_hardtop’, ‘carbody_hatchback’,
 ‘carbody_sedan’, ‘carbody_wagon’, ‘drivewheel_4wd’, ‘drivewheel_fwd’,
 ‘drivewheel_rwd’, ‘enginelocation_front’, ‘enginelocation_rear’,
 ‘enginetype_dohc’, ‘enginetype_dohcv’, ‘enginetype_l’, ‘enginetype_ohc’,
 ‘enginetype_ohcf’, ‘enginetype_ohcv’, ‘enginetype_rotor’,
 ‘fuelsystem_1bbl’, ‘fuelsystem_2bbl’, ‘fuelsystem_4bbl’,
 ‘fuelsystem_idi’, ‘fuelsystem_mfi’, ‘fuelsystem_mpfi’,
 ‘fuelsystem_spdi’, ‘fuelsystem_spfi’],)

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



Масштабирование данных

Шаг 9. Следующий шаг — проверить, нужно ли нам масштабировать ваши данные, мы можем проверить с помощью функции гистограммы, если все диапазоны гистограммы близки, то нам это не нужно, но в нашем случае значения диапазона различаются, поэтому мы используем .

#Scaling is required
Xs = scale(L)

Шаг 10 — Разделите ваши данные на тестовые и обучающие данные

#Splitting data into test and train — 30% Test
X_train, X_test, Y_train, Y_test = train_test_split(Xs, Y, test_size=0.3, random_state=42)

Алгоритм линейной регрессии

Шаг 11 — Примените алгоритм линейной регрессии к данным

#Finding correlation coeff
Coef=LinearRegression()
Coef.fit(X_train, Y_train)
Y_pred = Coef.predict(X_test)
# The coefficients
print(‘Coefficients: \n’, Coef.coef_)
# The mean squared error
print(“Mean squared error: %.2f”% mean_squared_error(Y_test, Y_pred))
# Explained variance score: 1 is perfect prediction
print(‘Variance score: %.2f’ % r2_score(Y_test, Y_pred)

Как только вы запустите код, ваш вывод

Coefficients: 
 [ 7.83130145e+03 -8.24821736e+01 1.64209493e+02 9.03257951e+01
 -7.33402562e+02 1.27321392e+03 -6.84990152e+01 2.42059603e+03
 -7.46641625e+02 3.81369780e+03 -9.05388795e+02 -1.86328007e+02
 -1.73407961e+02 3.09247182e+01 8.47271433e+02 1.07706262e+03
 -4.64136381e+02 1.81015178e+03 2.65204790e+03 4.02913783e+03
 2.68091864e+03 8.03297981e+02 1.31707808e+03 1.67510986e+03
 8.44374327e+02 1.51310319e+03 9.84312064e+02 2.58352341e+02
 -3.83369239e+02 -5.19119702e+02 -1.63320970e+02 -1.21204674e+03
 6.03626167e+02 -6.03502420e+02 -4.37537432e+02 -1.07419833e+03
 -3.72662511e+03 -2.92299330e+03 -2.36413504e+03 -1.17738398e+02
 1.17738398e+02 -4.58812217e+02 4.58812217e+02 4.00475450e+02
 5.83057077e+02 -7.91403414e+01 -9.02523556e+01 -2.99026219e+02
 1.20559956e+02 1.72395104e+02 -2.26981124e+02 -5.52149771e+02
 5.52149771e+02 9.36269755e+01 1.48300797e+02 -1.56772499e+02
 1.41841303e+02 -7.13740436e+02 -1.45771929e+02 1.17365939e+03
 -3.37634823e+02 4.68673722e+02 -1.10396862e+02 -1.17738398e+02
 4.43585392e-26 -1.83006342e+02 -3.30005214e+01 4.66320778e+01]
Mean squared error: 8220796.20
Variance score: 0.88

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

Если вы ищете исходный код -



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

Да прибудет с тобой сила.

Мадан

Ресурсы -









https://scikitlearn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py