Машинное обучение — Масштаб
Особенности шкалы
Когда ваши данные имеют разные значения и даже разные единицы измерения, их может быть сложно сравнивать. Что такое килограммы по сравнению с метрами? Или высота по сравнению со временем?
Ответ на эту проблему — масштабирование. Мы можем масштабировать данные до новых значений, которые легче сравнивать.
Взгляните на таблицу ниже, это тот же набор данных, который мы использовали в главе о множественной регрессии , но на этот раз столбец объема содержит значения в литрах вместо см 3 (1,0 вместо 1000).
Файл предназначен только для тестирования, вы можете скачать его здесь: cars2.csv
Машина | Модель | Объем | Масса | СО2 |
Тойота | Айго | 1,0 | 790 | 99 |
Мицубиси | Космическая звезда | 1,2 | 1160 | 95 |
Шкода | Ситиго | 1,0 | 929 | 95 |
Фиат | 500 | 0,9 | 865 | 90 |
Мини | Купер | 1,5 | 1140 | 105 |
Фольксваген | Вверх! | 1,0 | 929 | 105 |
Шкода | Фабия | 1,4 | 1109 | 90 |
Мерседес | Класс | 1,5 | 1365 | 92 |
Форд | Фиеста | 1,5 | 1112 | 98 |
Ауди | А1 | 1,6 | 1150 | 99 |
Хендай | I20 | 1.1 | 980 | 99 |
Сузуки | Быстрый | 1,3 | 990 | 101 |
Форд | Фиеста | 1,0 | 1112 | 99 |
Хонда | Гражданский | 1,6 | 1252 | 94 |
Хендай | I30 | 1,6 | 1326 | 97 |
Опель | Астра | 1,6 | 1330 | 97 |
БМВ | 1 | 1,6 | 1365 | 99 |
Мазда | 3 | 2.2 | 1280 | 104 |
Шкода | Стремительный | 1,6 | 1119 | 104 |
Форд | Фокус | 2.0 | 1328 | 105 |
Форд | Мондео | 1,6 | 1584 | 94 |
Опель | Знак отличия | 2.0 | 1428 | 99 |
Мерседес | С-Класс | 2.1 | 1365 | 99 |
Шкода | Октавия | 1,6 | 1415 | 99 |
Вольво | S60 | 2.0 | 1415 | 99 |
Мерседес | CLA | 1,5 | 1465 | 102 |
Ауди | A4 | 2.0 | 1490 | 104 |
Ауди | А6 | 2.0 | 1725 | 114 |
Вольво | V70 | 1,6 | 1523 | 109 |
БМВ | 5 | 2.0 | 1705 г. | 114 |
Мерседес | Е-Класс | 2.1 | 1605 | 115 |
Вольво | ХС70 | 2.0 | 1746 | 117 |
Форд | B-макс. | 1,6 | 1235 | 104 |
БМВ | 2 | 1,6 | 1390 | 108 |
Опель | Зафира | 1,6 | 1405 | 109 |
Мерседес | СЛК | 2,5 | 1395 | 120 |
Может быть трудно сравнить объем 1.0 с весом 790, но если мы масштабируем их оба до сопоставимых значений, мы можем легко увидеть, насколько одно значение сравнивается с другим.
Существуют разные методы масштабирования данных, в этом уроке мы будем использовать метод, называемый стандартизацией.
Метод стандартизации использует эту формулу:
z = (x - u) / s
Где z
новое значение,
x
исходное значение,
u
среднее значение и s
стандартное отклонение.
Если вы возьмете столбец веса из набора данных выше, первое значение будет 790, а масштабированное значение будет:
(790 - ) / = -2.1
Если вы возьмете столбец объема из набора данных выше, первое значение равно 1,0, а масштабированное значение будет:
(1.0 - ) / = -1.59
Теперь вы можете сравнивать -2,1 с -1,59 вместо сравнения 790 с 1,0.
Вам не нужно делать это вручную, в модуле Python sklearn есть вызываемый метод, StandardScaler()
который возвращает объект Scaler с методами преобразования наборов данных.
Пример
Масштабируйте все значения в столбцах «Вес» и «Объем»:
import pandas
from sklearn import linear_model
from
sklearn.preprocessing import StandardScaler
scale = StandardScaler()
df = pandas.read_csv("cars2.csv")
X = df[['Weight', 'Volume']]
scaledX = scale.fit_transform(X)
print(scaledX)
Результат:
Обратите внимание, что первые два значения равны -2,1 и -1,59, что соответствует нашим расчетам:
[[-2.10389253 -1.59336644] [-0.55407235 -1.07190106] [-1.52166278 -1.59336644] [-1.78973979 -1.85409913] [-0.63784641 -0.28970299] [-1.52166278 -1.59336644] [-0.76769621 -0.55043568] [ 0.3046118 -0.28970299] [-0.7551301 -0.28970299] [-0.59595938 -0.0289703 ] [-1.30803892 -1.33263375] [-1.26615189 -0.81116837] [-0.7551301 -1.59336644] [-0.16871166 -0.0289703 ] [ 0.14125238 -0.0289703 ] [ 0.15800719 -0.0289703 ] [ 0.3046118 -0.0289703 ] [-0.05142797 1.53542584] [-0.72580918 -0.0289703 ] [ 0.14962979 1.01396046] [ 1.2219378 -0.0289703 ] [ 0.5685001 1.01396046] [ 0.3046118 1.27469315] [ 0.51404696 -0.0289703 ] [ 0.51404696 1.01396046] [ 0.72348212 -0.28970299] [ 0.8281997 1.01396046] [ 1.81254495 1.01396046] [ 0.96642691 -0.0289703 ] [ 1.72877089 1.01396046] [ 1.30990057 1.27469315] [ 1.90050772 1.01396046] [-0.23991961 -0.0289703 ] [ 0.40932938 -0.0289703 ] [ 0.47215993 -0.0289703 ] [ 0.4302729 2.31762392]]
Прогнозировать значения CO2
Задача в главе «Множественная регрессия » состояла в том, чтобы предсказать выбросы CO2 от автомобиля, когда вы знали только его вес и объем.
Когда набор данных масштабируется, вам придется использовать масштаб при прогнозировании значений:
Пример
Рассчитайте выбросы CO2 от автомобиля объемом 1,3 литра и весом 2300 кг:
import pandas
from sklearn import linear_model
from
sklearn.preprocessing import StandardScaler
scale = StandardScaler()
df = pandas.read_csv("cars2.csv")
X = df[['Weight', 'Volume']]
y = df['CO2']
scaledX = scale.fit_transform(X)
regr = linear_model.LinearRegression()
regr.fit(scaledX, y)
scaled =
scale.transform([[2300, 1.3]])
predictedCO2 = regr.predict([scaled[0]])
print(predictedCO2)
Результат:
[107.2087328]