기계 학습 - 규모
스케일 기능
데이터의 값이 다르고 측정 단위가 다른 경우 이를 비교하기 어려울 수 있습니다. 미터와 비교하여 킬로그램은 무엇입니까? 아니면 시간에 비해 고도?
이 문제에 대한 답은 스케일링입니다. 데이터를 비교하기 쉬운 새 값으로 확장할 수 있습니다.
아래 표를 보면 다중 회귀 장 에서 사용한 것과 동일한 데이터 세트입니다 . 그러나 이번에는 부피 열에 cm 3 대신 리터 단위 의 값이 포함됩니다 (1000 대신 1.0).
파일은 테스트 목적으로만 사용되며 여기에서 다운로드할 수 있습니다. cars2.csv
차 | 모델 | 용량 | 무게 | 이산화탄소 |
도요타 | 아이고 | 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 |
메르세데스 | A급 | 1.5 | 1365 | 92 |
포드 | 축제 | 1.5 | 1112 | 98 |
아우디 | A1 | 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 |
BMW | 1 | 1.6 | 1365 | 99 |
마쓰다 | 삼 | 2.2 | 1280 | 104 |
스코다 | 빠른 | 1.6 | 1119 | 104 |
포드 | 집중하다 | 2.0 | 1328 | 105 |
포드 | 몬데오 | 1.6 | 1584 | 94 |
오펠 | 휘장 | 2.0 | 1428 | 99 |
메르세데스 | C급 | 2.1 | 1365 | 99 |
스코다 | 옥타비아 | 1.6 | 1415 | 99 |
볼보 | S60 | 2.0 | 1415 | 99 |
메르세데스 | CLA | 1.5 | 1465 | 102 |
아우디 | A4 | 2.0 | 1490 | 104 |
아우디 | A6 | 2.0 | 1725년 | 114 |
볼보 | V70 | 1.6 | 1523 | 109 |
BMW | 5 | 2.0 | 1705년 | 114 |
메르세데스 | E클래스 | 2.1 | 1605 | 115 |
볼보 | XC70 | 2.0 | 1746 | 117 |
포드 | 비맥스 | 1.6 | 1235 | 104 |
BMW | 2 | 1.6 | 1390 | 108 |
오펠 | 자피라 | 1.6 | 1405 | 109 |
메르세데스 | SLK | 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
이제 790을 1.0과 비교하는 대신 -2.1과 -1.59를 비교할 수 있습니다.
이 작업을 수동으로 수행할 필요가 없습니다. 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 배출량을 예측하는 것이었습니다.
데이터 세트가 척도화되면 값을 예측할 때 척도를 사용해야 합니다.
예시
무게가 2300kg인 1.3리터 자동차의 CO2 배출량을 예측하십시오.
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]