Общественный номер: You Er Hut
Автор: Питер
Редактор: Питер
Всем привет, меня зовут Питер~
Сегодня я привожу практическую статью о машинном обучении: использование библиотеки машинного обучения scikit-learn для борьбы с моделями линейной регрессии.
Машинное обучение на практике — линейная регрессия
В идеальном состоянии все, что нелинейно, можно подогнать под что-то линейное (см. формулу Тейлора). Более того, линейная модель, по сути, представляет собой среднее предсказание, и изменения большинства вещей колеблются только вокруг среднего значения (см. теорему больших чисел), поэтому линейная модель может моделировать большинство явлений.
Каталог статей
Базовая форма
Основное выражение
Предположим, что x описывается d атрибутами:;вПредставляет значение i-го атрибута. Линейная модель — это функция, которая предсказывает через комбинацию различных атрибутов, которые можно выразить как:
Если выразить как вектор как:
вназовите это весом, b - смещение
разные формы
Линейная функция f(x) в разных масштабах:
- f(x) принимает дискретные значения: линейные мультиклассовые модели
- f (x) Возьмите функции реального значения в цифровой области: модель линейной регрессии
- f(x) является логарифмическим: логарифмически-линейный режим
- сигмовидное нелинейное преобразование f (x): логарифмическая регрессия вероятности
В этой статье основное внимание уделяется проблеме линейной регрессии.
Линейная регрессия
данный набор данных.
Линейная регрессия Линейная регрессия пытается изучить линейную модель, которая максимально увеличивает прогнозируемое значение.и фактическая стоимостьнаименьшая разница
Метод измерения
Используйте среднеквадратичную ошибку для измерения: найдите подходящие w и b, удовлетворяющие
Среднеквадратическая ошибка соответствует обычно используемому евклидову расстоянию (евклидову расстоянию). Метод решения модели, основанный на минимизации среднеквадратичной ошибки, называется:Наименьших квадратов.
В модели линейной регрессии метод наименьших квадратов заключается в попытке найти прямую линию, которая минимизирует сумму евклидовых расстояний от всех выборок до прямой линии.
Параметрический решатель
Решение для w и b делаетДля достижения минимума этот процесс называется методом наименьших квадратов.Оценка параметра
Процесс вывода E(w,b) для w и b по отдельности. Конкретный процесс вывода см. в:кит данных China.GitHub.IO/pumpkin-Booh…
Установив два приведенных выше производных результата равными 0, мы можем получить два результата для w и b:
sklearn боевая линейная регрессия
Мы используем общедоступный набор данных в Интернете, чтобы понять, как использовать библиотеку машинного обучения sklearn для выполнения задач линейной регрессии, обучающих линейной регрессии.
-
Источники данных
-
исследование данных
-
обработка данных
-
Запуск линейной модели sklearn
-
Оценка модели
-
Оптимизация модели
-
Визуализируйте результаты
Источники данных
1. Введение данных здесь:archive.ICS.UCI.credits/beauty/datasets…
2. Пожалуйста, перейдите на адрес загрузки данныхархив.ICS.UCI.quote/beauty/machine-…
В данных есть 4 атрибута поля для описания выходной мощности электростанции, и последний атрибут является фактическим значением выходной мощности.
Что нам нужно сделать сейчас, так это использовать модель линейной регрессии, чтобы найти влияние 4 факторов на выходную мощность, чтобы предсказать мощность более позднего поколения.
исследование данных
import pandas as pd
import numpy as np
from sklearn import datasets, linear_model
from sklearn.linear_model import LinearRegression # 导入线性回归模型
import matplotlib.pyplot as plt
%matplotlib inline
1, данные читаются
2. Просмотр информации о данных
3. Просмотр статистики данных
обработка данных
1. Выбрать необходимые данные выборки X, то есть информацию первых 4-х полей
2. Выберите данные выходной метки нашего образца y, которые являются данными последнего поля атрибута.
Разделение набора данных
Разделение набора данных: одна часть становится тренировочным набором, а другая часть делится на тестовый набор
from sklearn.model_selection import train_test_split # 从模型选择模块中导入训练、测试集模块
X_train,X_test,y_train,y_test = train_test_split(X, y, random_state=1)
X_train # 7176条数据训练数据
Данные тестового набора 2392:
Строка записи выходного значения выборки совпадает с соответствующим X, при этом мы также обнаружили, что 75% данных в этом случае используется как обучающая выборка, а 25% — как тестовая.
соответствовать созданному объекту
line.fit(X_train,y_train)
LinearRegression()
Ознакомьтесь с нашими смоделированными коэффициентами:
print(line.intercept_) # 相当于是d;类似于截距
print(line.coef_) # 相当于是每个w的取值
[460.05727267]
[[-1.96865472 -0.2392946 0.0568509 -0.15861467]]
На данный момент мы смоделировали выражение линейной регрессии, то есть взаимосвязь между PE и предыдущими четырьмя переменными:
Оценка модели
Из данных обучающего набора мы получили выражение для линейной регрессии, и теперь мы используем это выражение для моделирования данных тестового набора, которые мы создали ранее.
Оценка модели для линейной регрессии обычно заключается в использовании среднеквадратичной ошибки (MSE) или среднеквадратичной ошибки (Root Mean Squared Error, RMSE) на тестовом наборе, как описано выше, для оценки качества модели. Для тестирования используется следующий код:
y_pred = line.predict(X_test) # 对测试集数据进行预测
y_pred
array([[457.26722361],
[466.70748375],
[440.33763981],
...,
[457.39596168],
[429.37990249],
[438.16837983]])
len(y_pred)
2392
После прогнозирования результата мы сравниваем прогнозируемое значение с фактическим значением:
from sklearn import metrics # 对比模块
# 输出MSE
print("MSE:",metrics.mean_squared_error(y_test,y_pred))
MSE: 20.837191547220346
# 输出RMSE:MSE开根号的结果
print("RMSE: ",np.sqrt(metrics.mean_squared_error(y_test,y_pred)))
RMSE: 4.564777272465804
Оптимизация модели с помощью перекрестной проверки
перекрестная проверка: Разделите все выборки данных D на k взаимоисключающих подмножеств одинакового размера. Каждое подмножество пытается сохранить согласованность распределения данных. Затем используйте подмножество k-1 в качестве тренировочного набора, а оставшееся — в качестве тестового набора.
Таким образом, можно получить k групп обучающих наборов/тестовых наборов, чтобы выполнить k обучения и тестирования и, наконец, вернуть среднее значение k обучения.
Мы можем использовать метод перекрестной проверки, который поставляется со sklearn, чтобы оптимизировать полученную модель В следующем примере используется 10-кратная перекрестная проверка:
line
LinearRegression()
from sklearn.model_selection import cross_val_predict # 导入交叉验证模块
y_predicted = cross_val_predict(line,X,y,cv=10)
y_predicted # 通过交叉验证得到的预测值
array([[467.24487977],
[444.06421837],
[483.53893768],
...,
[432.47556666],
[443.07355843],
[449.74395838]])
len(y_predicted)
9568
Рассчитайте MSE и RMSE предсказанных и истинных значений, полученных перекрестной проверкой:
# 输出MSE
print("MSE:",metrics.mean_squared_error(y,y_predicted))
MSE: 20.79367250985753
print("RMSE: ",np.sqrt(metrics.mean_squared_error(y,y_predicted)))
RMSE: 4.560007950635342
Мы обнаружили, что среднеквадратическая ошибка после использования перекрестной проверки лучше, чем ошибка без использования
Рисование
Наконец, мы рисуем график между реальным значением выборки и прогнозируемым значением, Чем ближе точка к значению y = x в середине, тем меньше потеря прогноза.
Вот код и результат построения с помощью matplotlib:
fig, ax = plt.subplots()
ax.scatter(y, y_predicted)
ax.plot([y.min(), y.max()], [y.min(), y.max()], 'k--', lw=3)
ax.set_xlabel('Measured') # 真实值
ax.set_ylabel('Predicted') # 预测值
plt.show()
Я перерисовал данные с помощью Plotly_express, чтобы увидеть эффект:
data = pd.concat([pd.DataFrame(y),pd.DataFrame(y_predicted)],axis=1)
data.columns = ["Measured", "Predicted"]
data
import plotly_express as px
fig = px.scatter(data,
x="Measured", # 真实值
y="Predicted", # 预测值
trendline="ols", # 趋势线
trendline_color_override="red" # 颜色
)
fig.show()