Прежде чем мы приступим к делу, я хочу немного рассказать вам о регрессии опорных векторов (SVR). Этот алгоритм может дать гибкость для указания того, сколько ошибок может быть принято для модели и найти, какая строка соответствует данным. Это выглядит иначе для общего алгоритма наименьших квадратов, основная функция SVR хороша для минимизации коэффициента, особенно коэффициента вектора l2-нормы.
Хорошо, ребята, в этом разделе мы сразу же практикуем простой пример регрессии опорных векторов. Данные, которые я использую в данном случае, вы могли получить по этой ссылке.
Факт о данных содержит рейтинг расхода топлива и оценку выбросов углекислого газа для легкового автомобиля в Канаде. Внутри он имеет одиннадцать столбцов и 1067 строк.
viz = cdf[['CYLINDERS','ENGINESIZE','CO2EMISSIONS','FUELCONSUMPTION_COMB']] viz.hist() plt.show()
Основываясь на этом рисунке, мы видим, что данные о выбросах CO2 имеют нормальное распределение, в то время как данные о двигателе и расходе топлива имеют распределение асимметрии, направленное вправо, а данные по цилиндрам имеют ненормальное распределение, поскольку данные не накапливаются.
plt.scatter(cdf.FUELCONSUMPTION_COMB, cdf.CO2EMISSIONS, color='blue') plt.xlabel("FUELCONSUMPTION_COMB") plt.ylabel("Emission") plt.show()
На графике представлена информация о взаимосвязи между двумя переменными (выбросы и расход топлива). В целом, эти точки на диаграмме рассеяния означают, что выбросы и расход топлива имеют положительную корреляцию, и если выбросы увеличились, то и расход топлива будет иметь такое же условие. Это возможно из-за того, что выбросы транспортного средства зависят от расхода топлива.
Принимая во внимание, что связь между выбросами и объемом двигателя имеет положительную корреляцию, но не является существенной, как раньше. Это, по-видимому, предполагает, что если объем двигателя имеет большее значение, то выбросы в этом состоянии также не имеют большего значения.
После того, как мы проведем исследование данных, мы можем сделать следующий шаг, точно обучив модели с помощью алгоритма SVR. В этом случае я разделяю данные на 80 % данных обучения и 20 % данных испытаний, с выбросами в качестве зависимой переменной и объемом двигателя в качестве независимой переменной.
X = cdf.iloc[:, 0].values y = cdf.iloc[:, 3].values X = X.reshape(-1,1) y = y.reshape(-1,1) # Splitting the dataset into the Training set and Test set from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0) # Feature Scaling from sklearn.preprocessing import StandardScaler sc_X = StandardScaler() sc_y = StandardScaler() X = sc_X.fit_transform(X) y = sc_y.fit_transform(y) # Fitting SVR to the dataset from sklearn.svm import SVR regressor = SVR(kernel = 'linear') #linear = Linear Kernel regressor.fit(X, y)
В приведенном выше коде мы используем линейное ядро алгоритма SVR, потому что в этом случае мы выбираем 2 переменные из данных.
# Visualising the SVR results plt.scatter(X, y, color = 'blue') plt.plot(X, regressor.predict(X), color = 'red') plt.title('Emission Dataset') plt.xlabel('Engine Size') plt.ylabel('Emission') plt.show()
Они иллюстрируют и представляют красную линию как данные регрессии модели. С этого момента видно, что модель хорошо согласуется с обучающими данными, однако все еще есть много данных, которые далеки от красной линии. Это явно связано с тем, что мы не используем очистку данных, потому что внутри данных может быть много выбросов, которые создают это условие в модели. Поэтому очень важно выполнить очистку данных перед моделированием с помощью алгоритма в случае машинного обучения.
from sklearn.metrics import r2_score test_x = np.asanyarray(cdf[['ENGINESIZE']]) test_y = np.asanyarray(cdf[['CO2EMISSIONS']]) test_y_ = sc_y.inverse_transform(regressor.predict(sc_X.transform(test_x))) print("Mean absolute error: %.2f" % np.mean(np.absolute(test_y_ - test_y))) print("Residual sum of squares (MSE): %.2f" % np.mean((test_y_ - test_y) ** 2)) print("R2-score: %.2f" % r2_score(test_y_ , test_y) )
Оценка, которую мы построили на основе данных о расходе топлива с помощью алгоритма SVR, дает менее 70% оценки r2. Одной из причин этого может быть то, что мы должны подготовить данные, прежде чем моделирование будет лучше в другом случае с этим алгоритмом. К вашему сведению, алгоритм SVR включает алгоритм, который очень чувствителен к выбросам данных.
Я надеюсь, что вы можете сделать все возможное, а не я, вы можете сделать с другим алгоритмом или использовать другие данные очистки или какой-то процесс, который я не использовал в этом случае.
Итак, мой блог подходит к концу, я очень благодарен вам за внимание, которое читает этот блог, и я просто извиняюсь, если в этом блоге встречаются какие-то неправильные слова. Люблю вас ребята! Увидимся в другом блоге.