Ребята, сегодня мы рассмотрим множество полезных концепций, решая проблему прогнозирования 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 и выше.
Если вы ищете исходный код -
Я трачу много времени на объяснение технических вещей с максимально возможной простотой, если вам нравятся мои усилия, вознаградите меня репостом, лайком или упоминанием.
Да прибудет с тобой сила.
Мадан