ch13. Linear Regression
Summary
선형 회귀는 가장 간단한 지도 학습 알고리즘 중 하나입니다.
-
직선 학습하기 (13.1)
-
교차 특성 다루기 (13.2)
-
비선형 관계 학습하기 (13.3)
-
규제로 분산 줄이기 (13.4)
-
라소 회귀로 특성 줄이기 (13.5)
Practice
13.0 소개
선형 회귀는 가장 간단한 지도 학습 알고리즘 중 하나입니다.
이 장에서는 높은 성능의 예측 모델을 만들기 위한 다양한 선형 회귀 방법을 소개합니다.
13.1 직선 학습하기
Feature와 target 벡터 사이의 선형 관계를 표현하는 모델을 훈련합니다.
sklearn의 LinearRegression을 사용합니다.
from sklearn.linear_model import LinearRegression
from sklearn.datasets import load_boston
# 데이터를 로드하고 두 개의 특성만 선택합니다.
boston = load_boston()
features = boston.data[:, 0:2]
target = boston.target
# 선형 회귀 모델을 만듭니다.
regression = LinearRegression()
# 선형 회귀 모델을 학습합니다.
model = regression.fit(features, target)
선형 회귀는 features과 target 벡터 사으의 관계가 거의 선형이라고 가정합니다.
Target 벡터에 대한 feature의 효과(또는 계수coefficient, 가중치weight, 파라미터parameter라고도 부릅니다)는 상수입니다.
해결에서 간단한 설명을 위해 두 개의 특성만 사용한 모델을 훈련했습니다.
이 선형 모델을 식으로 표현하면 다음과 같습니다.
여기에서 는 target
는 하나의 feature 데이터입니다.
는 모델을 훈련하여 찾아야 하는 계수입니다.
은 오차입니다.
모델을 훈련한 후에 각 파라미터를 확인할 수 있습니다.
# 절편을 확인합니다.
model.intercept_
22.485628113468223
는 coef_에서 볼 수 있습니다.
# 특성의 계수를 확인합니다.
model.coef_
array([-0.35207832, 0.11610909])
predict 메서드를 사용하여 주택 값을 예측할 수 있습니다.
# target 값을 확인합니다.
target[0]
24.0
# 첫 번째 샘플의 target 값을 예측합니다.
model.predict(features)[0]
24.573366631705547
선형 회귀의 주요 장점은 해석이 용이하다는 것입니다.
모델의 계수는 feature가 target 값에 미치는 영향의 크기입니다.
13.2 교차 특성 다루기
target 변수에 영향을 미치면서 다른 feature에 의존하는 feature가 있습니다.
sklearn의 PolynomialFeatures 클래스로 교차항interactive term을 만들어 의존성을 잡아냅니다.
from sklearn.linear_model import LinearRegression
from sklearn.datasets import load_boston
from sklearn.preprocessing import PolynomialFeatures
# 데이터를 로드하고 두 개의 특성만 선택합니다.
boston = load_boston()
features = boston.data[:, 0:2]
target = boston.target
# 교차항을 만듭니다.
interaction = PolynomialFeatures(degree=3,
include_bias=False,
interaction_only=True)
features_interaction = interaction.fit_transform(features)
# 선형 회귀 모델을 만듭니다.
regression = LinearRegression()
# 선형 회귀 모델을 훈련합니다.
model = regression.fit(features_interaction, target)
이따금 target 변수에 대한 feature의 영향이 부분적으로 또 다른 특성에 의존합니다.
예를 들어, 두 개의 이진 특성을 가진 커피 예제를 생각해 봅시다.
설탕이 있는지sugar, 커피를 저었는지 여부stirred가 feature입니다.
예측하고 싶은 것은 커피 맛이 달달한지 여부입니다.
설탕을 넣고 커피를 젓는 것이 함께 일어나야(sugar=1, stirred=1) 커피 맛이 달달할 것입니다.
달콤함에 대한 sugar와 stirred 사이에 상호 작용interaction effect이 있다고 말합니다.
두 특성값의 곱을 포함하는 새로운 특성을 포함시켜 상호 작용을 나타낼 수 있습니다.
여기에서 는 sugar와 stirred의 값입니다.
는 두 특성의 상호 작용을 나타냅니다.
해결에서 두 개의 특성만을 가진 데이터셋을 사용했습니다. 첫 번째 샘플의 특성값은 다음과 같습니다.
# 첫 번째 샘플의 특성값을 확인합니다.
features[0]
array([6.32e-03, 1.80e+01])
모든 샘플에서 이 두 값을 곱하여 교차항을 만듭니다.
import numpy as np
# 각 샘플에서 첫 번째와 두 번째 특성을 곱합니다.
interaction_term = np.multiply(features[:, 0], features[:, 1])
# 첫 번째 샘플의 교차항을 확인합니다.
interaction_term[0]
0.11376
sklearn의 PolynomialFeatures를 사용해 feature의 모든 조합에 대한 교차항을 만들면 두 feature 사이에 상호 작용 존재여부를 확인할 수 있습니다. 그런 다음 모델 선택 전략을 사용해 최선의 모델을 만드는 특성 조합과 교차항을 찾습니다.
PolynomialFeatures를 사용해 교차항을 만들 때 지정해야 하는 세 개의 중요한 매개변수가 있습니다.
- interaction_only=True
오직 교차항만 반환합니다. - include_bias=False
기본적으로 절편bias라고 부르는 1로 채워진 feature를 추가합니다. 이를 원치 않을 때 지정합니다. - degree 매개변수
degree 매개변수는 교차항을 만들 최대 특성의 수를 결정합니다.
해결에서 PolynomialFeatures의 출력으로부터 첫 번째 샘플의 특성값과 교차항이 수동으로 계산한 것과 같은지 확인할 수 있습니다.
# 첫 번째 샘플의 값을 확인합니다.
features_interaction[0]
array([6.3200e-03, 1.8000e+01, 1.1376e-01])
13.3 비선형 관계 학습하기
선형 회귀 모델에 다항 특성polynomial feature을 추가하여 다항 회귀polymonial regression를 만듭니다.
from sklearn.linear_model import LinearRegression
from sklearn.datasets import load_boston
from sklearn.preprocessing import PolynomialFeatures
# 데이터를 로드하고 하나의 특성을 선택합니다.
boston = load_boston()
features = boston.data[:, 0:1]
target = boston.target
# 다항 특성 x^2와 x^3을 만듭니다.
polynomial = PolynomialFeatures(degree=3, include_bias=False)
features_polynomial = polynomial.fit_transform(features)
# 선형 회귀 모델을 만듭니다.
regression = LinearRegression()
# 선형 회귀 모델을 훈련합니다.
model = regression.fit(features_polynomial, target)
다항 회귀는 선형 함수에 다항 특성을 추가하여 다항 함수로 변환합니다.
d는 다항식의 차수입니다.
# 첫 번째 샘플을 확인합니다.
features[0]
array([0.00632])
첫 번째 샘플의 값으로 2차 다항 특성 를 만듭니다.
# 첫 번째 샘플을 x^2로 거듭제곱합니다.
features[0]**2
array([3.99424e-05])
# 첫 번째 샘플을 x^3로 세제곱합니다.
features[0]**3
array([2.52435968e-07])
이 세 특성을 특성 행렬에 모두 포함하고 선형 회귀를 실행하면 다항 회귀가 됩니다.
# 첫 번째 샘플의 x, x^2, x^3 값을 확인합니다.
features_polynomial[0]
array([6.32000000e-03, 3.99424000e-05, 2.52435968e-07])
13.4 규제로 분산 줄이기
선형 회귀의 분산을 줄이고 싶습니다.
리지 회귀나 라소 회귀와 같이 축소 페널티(또는 규제regularization라고도 부릅니다.)가 포함된 학습 알고리즘을 사용합니다.
from sklearn.linear_model import Ridge
from sklearn.datasets import load_boston
from sklearn.preprocessing import StandardScaler
# 데이터를 로드합니다.
boston = load_boston()
features = boston.data
target = boston.target
# 특성을 표준화합니다.
scaler = StandardScaler()
features_standardized = scaler.fit_transform(features)
# alpha 값을 지정한 리지 회귀를 만듭니다.
regression = Ridge(alpha=0.5)
# 선형 회귀 모델을 훈련합니다.
model = regression.fit(features_standardized, target)
표준 선형 회귀에서는 모델이 정답()과 예측(()사이의 제곱 오차 합sum of squared error 또는 잔차 제곱합residual sum of squares, RSS을 최소화하기 위해 훈련합니다.
규제를 적용한 회귀 학습기도 비슷하지만 RSS와 전체 계숫값의 합인 페널티를 최소화합니다.
모델을 축소 시키려는 경향이 있기 때문에 이 페널티를 축소 페널티라고 부릅니다.
규제를 적용한 선형 회귀로는 리지 회귀와 라소 회귀 두 종류가 널리 사용됩니다.
공식에 사용하는 축소 페널티만 다릅니다.
리지 회귀의 축소 페널티는 모든 계수의 제곱합에 튜닝 파라미터를 곱한 것입니다.
는 p 특성의 j번째 계수입니다.
는 하이퍼파라미터입니다.
라소 회귀의 축소 페널티는 모든 계수의 절대값 합에 튜닝 하이퍼파라미터를 곱한 것입니다.
n은 샘플 개수입니다.
일반적인 경험에 비춰보면 리지 회귀가 라소 회귀보다 조금 더 좋은 예측을 만듭니다.
하지만 라소 회귀가 더 이해하기 쉬운 모델을 만듭니다. (13.5에서 그 이유를 설명합니다.)
리지와 라소 페널티 사이에 균형을 맞추고 싶다면 엘라스틱넷을 사용할 수 있습니다. 이 모델은 두 페널티를 모두 포함한 회귀 모델입니다.
어떤 것을 사용하든지 이 함수들은 최소화하려는 손실 함수에 계숫값을 포함시킴으로써 크고 복잡한 모델을 불리하게 만듭니다.
하이퍼파라미터 는 계수를 얼마나 불리하게 만들지 조절합니다. 값이 클수록 더 간단한 모델을 만듭니다. 이상적인 값을 구하려면 다른 하이퍼파라미터와 같이 튜닝해야 합니다. sklearn의 RidgeCV 클래스를 사용하면 좋은 값을 선택할 수 있습니다.
# 라이브러리를 import합니다.
from sklearn.linear_model import RidgeCV
# 세 개의 alpha 값에 대한 리지 회귀를 만듭니다.
regr_cv = RidgeCV(alphas=[0.1, 1.0, 10.0])
# 선형 회귀 모델을 훈련합니다.
model_cv = regr_cv.fit(features_standardized, target)
# 계수를 확인합니다.
model_cv.coef_
array([-0.91987132, 1.06646104, 0.11738487, 0.68512693, -2.02901013,
2.68275376, 0.01315848, -3.07733968, 2.59153764, -2.0105579 ,
-2.05238455, 0.84884839, -3.73066646])
# alpha 값을 확인합니다.
model_cv.alpha_
1.0
RidgeCV 클래스의 cv 매개변수를 사용해 교차검증 방식을 지정할 수 있습니다. 기본값은 None으로 LOOCV 방식을 사용합니다.
정수를 지정하면 GridSearchCV를 사용하여 교차검증을 수행합니다.
# 5-폴드 교차검증을 사용하여 리지 회귀를 만듭니다.
regr_cv = RidgeCV(alphas=[0.1, 1.0, 10.0], cv=5)
# 선형 회귀 모델을 훈련합니다.
model_cv = regr_cv.fit(features_standardized, target)
# alpha 값을 확인합니다.
model_cv.alpha_
10.0
엘라스틱넷은 ElasticNet 클래스 입니다. 최소화하는 함수는 다음과 같습니다.
를 사용하여 라소 페널티와 리지 페널티를 조절합니다. 는 ElasticNet 클래스의 l1_ratio입니다. 라소 클래스는 l1_ratio를 1.0로 설정한 ElasticNet 클래스를 사용합니다.
13.5 라소 회귀로 특성 줄이기
특성의 수를 줄여서 선형 회귀 모델을 단순하게 만듭니다.
라소 회귀를 사용합니다.
from sklearn.linear_model import Lasso
from sklearn.datasets import load_boston
from sklearn.preprocessing import StandardScaler
# 데이터를 로드합니다.
boston = load_boston()
features = boston.data
target = boston.target
# 특성을 표준화합니다.
scaler = StandardScaler()
features_standardized = scaler.fit_transform(features)
# alpha 값을 지정한 라소 회귀를 만듭니다.
regression = Lasso(alpha=0.5)
# 선형 회귀 모델을 훈련합니다.
model = regression.fit(features_standardized, target)
라소 회귀 페널티의 한 가지 재미있는 특성은 모델의 계수를 0까지 축소시킬 수 있다는 것입니다. 결국 모델에 있는 특성의 수를 줄일 수 있습니다.
예를 들어 해결에서 alpha를 0.5로 지정하여 많은 계수가 0이 되었습니다. 이에 해당하는 특성은 모델에서 사용되지 않는다른 뜻입니다.
# 계수를 확인합니다.
model.coef_
array([-0.11526463, 0. , -0. , 0.39707879, -0. ,
2.97425861, -0. , -0.17056942, -0. , -0. ,
-1.59844856, 0.54313871, -3.66614361])
값이 너무 크게 증가하면 어떤 특성도 사용하지 않습니다.
이런 효과의 실제적인 장점은 특성 행렬에 100개의 특성이 있을 때, 라소의 하이퍼파라미터를 조정하여 가장 중요한 n개의 특성만 사용하는 모델을 만들 수 있다는 뜻입니다. 적은 수의 특성이 설명하기 쉽기 때문에 모델을 더 쉽게 이해할 수 있고 분산이 감소됩니다.
라소의 값을 찾기 위해 LassoCV 클래스를 사용할 수 있습니다. LassoCV의 cv 매개변수 기본값은 3으로 3-폴드 교차검증을 사용합니다.
# 라이브러리를 import 합니다.
from sklearn.linear_model import LassoCV
# 세 개의 alpha 값에 대한 라소 회귀를 만듭니다.
lasso_cv = LassoCV(alphas=[0.1, 1.0, 10.0], cv=5)
# 선형 회귀 모델을 훈련합니다.
model_cv = lasso_cv.fit(features_standardized, target)
# 계수를 확인합니다.
model_cv.coef_
array([-0.63230364, 0.70840931, -0. , 0.65760723, -1.57419335,
2.82626903, -0. , -2.42207901, 1.19593681, -0.84646778,
-1.92249345, 0.76216539, -3.72618383])
# alpha 값을 확인합니다.
model_cv.alpha_
0.1
LssoCV는 n_alphas 매개변수를 사용해 자동으로 탐색 대상 값을 생성할 수 있습니다.
# 1000개의 alpha 값을 탐색하는 라소 회귀를 만듭니다.
lasso_cv = LassoCV(n_alphas=1000, cv=5)
# 선형 회귀 모델을 훈련합니다.
model_cv = lasso_cv.fit(features_standardized, target)
# 계수를 확인합니다.
model_cv.coef_
array([-0.47509958, 0.51087329, -0.06951944, 0.64416411, -1.32325523,
2.90601026, -0. , -2.05439547, 0.42015063, -0.19614605,
-1.85051983, 0.71550534, -3.72013448])
# alpha 값을 확인합니다.
model_cv.alpha_
0.15326173083090813
# 탐색 대상 alpha 값을 확인합니다.
model_cv.alphas_
array([6.77765364, 6.73095006, 6.68456831, 6.63850616, 6.59276142,
6.54733189, 6.50221542, 6.45740983, 6.41291299, 6.36872277,
6.32483706, 6.28125375, 6.23797077, 6.19498605, 6.15229752,
6.10990315, 6.06780092, 6.0259888 , 5.98446481, 5.94322695,
5.90227325, 5.86160175, 5.82121052, 5.78109761, 5.74126112,
5.70169913, 5.66240975, 5.62339112, 5.58464135, 5.5461586 ,
5.50794102, 5.4699868 , 5.43229411, 5.39486116, 5.35768615,
5.32076731, 5.28410287, 5.24769107, 5.21153018, 5.17561847,
5.13995423, 5.10453573, 5.0693613 , 5.03442925, 4.99973792,
4.96528563, 4.93107075, 4.89709163, 4.86334666, 4.82983422,
4.79655271, 4.76350054, 4.73067612, 4.69807789, 4.66570428,
4.63355376, 4.60162478, 4.56991582, 4.53842536, 4.50715189,
4.47609393, 4.44524998, 4.41461857, 4.38419823, 4.35398751,
4.32398498, 4.29418918, 4.2645987 , 4.23521213, 4.20602805,
4.17704507, 4.14826181, 4.11967689, 4.09128894, 4.06309661,
4.03509855, 4.00729342, 3.97967989, 3.95225664, 3.92502235,
3.89797573, 3.87111549, 3.84444034, 3.817949 , 3.7916402 ,
3.7655127 , 3.73956523, 3.71379657, 3.68820547, 3.66279071,
3.63755109, 3.61248538, 3.5875924 , 3.56287095, 3.53831985,
3.51393793, 3.48972402, 3.46567697, 3.44179562, 3.41807883,
3.39452547, 3.37113441, 3.34790453, 3.32483473, 3.3019239 ,
3.27917094, 3.25657476, 3.2341343 , 3.21184847, 3.1897162 ,
3.16773644, 3.14590815, 3.12423027, 3.10270176, 3.08132161,
3.06008878, 3.03900226, 3.01806105, 2.99726414, 2.97661053,
2.95609925, 2.93572931, 2.91549973, 2.89540955, 2.87545781,
2.85564355, 2.83596583, 2.8164237 , 2.79701623, 2.7777425 ,
2.75860158, 2.73959256, 2.72071452, 2.70196657, 2.68334781,
2.66485735, 2.6464943 , 2.62825779, 2.61014694, 2.59216089,
2.57429878, 2.55655976, 2.53894297, 2.52144757, 2.50407273,
2.48681762, 2.46968141, 2.45266329, 2.43576243, 2.41897803,
2.40230929, 2.38575541, 2.36931561, 2.35298908, 2.33677506,
2.32067277, 2.30468143, 2.28880029, 2.27302858, 2.25736556,
2.24181046, 2.22636255, 2.21102109, 2.19578534, 2.18065459,
2.16562809, 2.15070514, 2.13588502, 2.12116702, 2.10655045,
2.09203459, 2.07761876, 2.06330227, 2.04908442, 2.03496455,
2.02094198, 2.00701604, 1.99318605, 1.97945137, 1.96581133,
1.95226528, 1.93881258, 1.92545257, 1.91218463, 1.89900811,
1.88592239, 1.87292684, 1.86002084, 1.84720377, 1.83447503,
1.82183399, 1.80928006, 1.79681264, 1.78443113, 1.77213494,
1.75992348, 1.74779617, 1.73575242, 1.72379167, 1.71191333,
1.70011685, 1.68840165, 1.67676718, 1.66521288, 1.6537382 ,
1.64234259, 1.63102551, 1.61978641, 1.60862475, 1.59754001,
1.58653165, 1.57559915, 1.56474198, 1.55395963, 1.54325158,
1.53261731, 1.52205632, 1.51156811, 1.50115216, 1.490808 ,
1.48053511, 1.47033301, 1.46020121, 1.45013923, 1.44014658,
1.4302228 , 1.42036739, 1.4105799 , 1.40085985, 1.39120677,
1.38162022, 1.37209973, 1.36264484, 1.3532551 , 1.34393006,
1.33466928, 1.32547232, 1.31633873, 1.30726808, 1.29825993,
1.28931386, 1.28042943, 1.27160622, 1.26284382, 1.25414179,
1.24549972, 1.23691721, 1.22839384, 1.2199292 , 1.21152289,
1.20317451, 1.19488365, 1.18664992, 1.17847293, 1.17035229,
1.1622876 , 1.15427849, 1.14632457, 1.13842545, 1.13058077,
1.12279014, 1.1150532 , 1.10736957, 1.09973889, 1.09216078,
1.0846349 , 1.07716088, 1.06973836, 1.06236699, 1.05504641,
1.04777628, 1.04055624, 1.03338596, 1.02626508, 1.01919327,
1.0121702 , 1.00519552, 0.9982689 , 0.99139001, 0.98455852,
0.9777741 , 0.97103644, 0.9643452 , 0.95770008, 0.95110074,
0.94454688, 0.93803817, 0.93157432, 0.92515501, 0.91877994,
0.91244879, 0.90616127, 0.89991708, 0.89371591, 0.88755748,
0.88144148, 0.87536763, 0.86933563, 0.8633452 , 0.85739604,
0.85148788, 0.84562043, 0.83979341, 0.83400655, 0.82825956,
0.82255218, 0.81688412, 0.81125512, 0.80566491, 0.80011322,
0.79459978, 0.78912434, 0.78368662, 0.77828638, 0.77292335,
0.76759728, 0.7623079 , 0.75705498, 0.75183825, 0.74665747,
0.74151239, 0.73640276, 0.73132834, 0.72628889, 0.72128417,
0.71631393, 0.71137794, 0.70647596, 0.70160776, 0.69677311,
0.69197178, 0.68720352, 0.68246813, 0.67776536, 0.67309501,
0.66845683, 0.66385062, 0.65927614, 0.65473319, 0.65022154,
0.64574098, 0.6412913 , 0.63687228, 0.63248371, 0.62812538,
0.62379708, 0.6194986 , 0.61522975, 0.61099032, 0.60678009,
0.60259888, 0.59844648, 0.59432269, 0.59022732, 0.58616018,
0.58212105, 0.57810976, 0.57412611, 0.57016991, 0.56624098,
0.56233911, 0.55846413, 0.55461586, 0.5507941 , 0.54699868,
0.54322941, 0.53948612, 0.53576862, 0.53207673, 0.52841029,
0.52476911, 0.52115302, 0.51756185, 0.51399542, 0.51045357,
0.50693613, 0.50344293, 0.49997379, 0.49652856, 0.49310707,
0.48970916, 0.48633467, 0.48298342, 0.47965527, 0.47635005,
0.47306761, 0.46980779, 0.46657043, 0.46335538, 0.46016248,
0.45699158, 0.45384254, 0.45071519, 0.44760939, 0.444525 ,
0.44146186, 0.43841982, 0.43539875, 0.4323985 , 0.42941892,
0.42645987, 0.42352121, 0.4206028 , 0.41770451, 0.41482618,
0.41196769, 0.40912889, 0.40630966, 0.40350986, 0.40072934,
0.39796799, 0.39522566, 0.39250224, 0.38979757, 0.38711155,
0.38444403, 0.3817949 , 0.37916402, 0.37655127, 0.37395652,
0.37137966, 0.36882055, 0.36627907, 0.36375511, 0.36124854,
0.35875924, 0.3562871 , 0.35383199, 0.35139379, 0.3489724 ,
0.3465677 , 0.34417956, 0.34180788, 0.33945255, 0.33711344,
0.33479045, 0.33248347, 0.33019239, 0.32791709, 0.32565748,
0.32341343, 0.32118485, 0.31897162, 0.31677364, 0.31459081,
0.31242303, 0.31027018, 0.30813216, 0.30600888, 0.30390023,
0.3018061 , 0.29972641, 0.29766105, 0.29560992, 0.29357293,
0.29154997, 0.28954095, 0.28754578, 0.28556435, 0.28359658,
0.28164237, 0.27970162, 0.27777425, 0.27586016, 0.27395926,
0.27207145, 0.27019666, 0.26833478, 0.26648573, 0.26464943,
0.26282578, 0.26101469, 0.25921609, 0.25742988, 0.25565598,
0.2538943 , 0.25214476, 0.25040727, 0.24868176, 0.24696814,
0.24526633, 0.24357624, 0.2418978 , 0.24023093, 0.23857554,
0.23693156, 0.23529891, 0.23367751, 0.23206728, 0.23046814,
0.22888003, 0.22730286, 0.22573656, 0.22418105, 0.22263625,
0.22110211, 0.21957853, 0.21806546, 0.21656281, 0.21507051,
0.2135885 , 0.2121167 , 0.21065504, 0.20920346, 0.20776188,
0.20633023, 0.20490844, 0.20349646, 0.2020942 , 0.2007016 ,
0.19931861, 0.19794514, 0.19658113, 0.19522653, 0.19388126,
0.19254526, 0.19121846, 0.18990081, 0.18859224, 0.18729268,
0.18600208, 0.18472038, 0.1834475 , 0.1821834 , 0.18092801,
0.17968126, 0.17844311, 0.17721349, 0.17599235, 0.17477962,
0.17357524, 0.17237917, 0.17119133, 0.17001168, 0.16884017,
0.16767672, 0.16652129, 0.16537382, 0.16423426, 0.16310255,
0.16197864, 0.16086248, 0.159754 , 0.15865317, 0.15755992,
0.1564742 , 0.15539596, 0.15432516, 0.15326173, 0.15220563,
0.15115681, 0.15011522, 0.1490808 , 0.14805351, 0.1470333 ,
0.14602012, 0.14501392, 0.14401466, 0.14302228, 0.14203674,
0.14105799, 0.14008598, 0.13912068, 0.13816202, 0.13720997,
0.13626448, 0.13532551, 0.13439301, 0.13346693, 0.13254723,
0.13163387, 0.13072681, 0.12982599, 0.12893139, 0.12804294,
0.12716062, 0.12628438, 0.12541418, 0.12454997, 0.12369172,
0.12283938, 0.12199292, 0.12115229, 0.12031745, 0.11948836,
0.11866499, 0.11784729, 0.11703523, 0.11622876, 0.11542785,
0.11463246, 0.11384255, 0.11305808, 0.11227901, 0.11150532,
0.11073696, 0.10997389, 0.10921608, 0.10846349, 0.10771609,
0.10697384, 0.1062367 , 0.10550464, 0.10477763, 0.10405562,
0.1033386 , 0.10262651, 0.10191933, 0.10121702, 0.10051955,
0.09982689, 0.099139 , 0.09845585, 0.09777741, 0.09710364,
0.09643452, 0.09577001, 0.09511007, 0.09445469, 0.09380382,
0.09315743, 0.0925155 , 0.09187799, 0.09124488, 0.09061613,
0.08999171, 0.08937159, 0.08875575, 0.08814415, 0.08753676,
0.08693356, 0.08633452, 0.0857396 , 0.08514879, 0.08456204,
0.08397934, 0.08340066, 0.08282596, 0.08225522, 0.08168841,
0.08112551, 0.08056649, 0.08001132, 0.07945998, 0.07891243,
0.07836866, 0.07782864, 0.07729234, 0.07675973, 0.07623079,
0.0757055 , 0.07518382, 0.07466575, 0.07415124, 0.07364028,
0.07313283, 0.07262889, 0.07212842, 0.07163139, 0.07113779,
0.0706476 , 0.07016078, 0.06967731, 0.06919718, 0.06872035,
0.06824681, 0.06777654, 0.0673095 , 0.06684568, 0.06638506,
0.06592761, 0.06547332, 0.06502215, 0.0645741 , 0.06412913,
0.06368723, 0.06324837, 0.06281254, 0.06237971, 0.06194986,
0.06152298, 0.06109903, 0.06067801, 0.06025989, 0.05984465,
0.05943227, 0.05902273, 0.05861602, 0.05821211, 0.05781098,
0.05741261, 0.05701699, 0.0566241 , 0.05623391, 0.05584641,
0.05546159, 0.05507941, 0.05469987, 0.05432294, 0.05394861,
0.05357686, 0.05320767, 0.05284103, 0.05247691, 0.0521153 ,
0.05175618, 0.05139954, 0.05104536, 0.05069361, 0.05034429,
0.04999738, 0.04965286, 0.04931071, 0.04897092, 0.04863347,
0.04829834, 0.04796553, 0.04763501, 0.04730676, 0.04698078,
0.04665704, 0.04633554, 0.04601625, 0.04569916, 0.04538425,
0.04507152, 0.04476094, 0.0444525 , 0.04414619, 0.04384198,
0.04353988, 0.04323985, 0.04294189, 0.04264599, 0.04235212,
0.04206028, 0.04177045, 0.04148262, 0.04119677, 0.04091289,
0.04063097, 0.04035099, 0.04007293, 0.0397968 , 0.03952257,
0.03925022, 0.03897976, 0.03871115, 0.0384444 , 0.03817949,
0.0379164 , 0.03765513, 0.03739565, 0.03713797, 0.03688205,
0.03662791, 0.03637551, 0.03612485, 0.03587592, 0.03562871,
0.0353832 , 0.03513938, 0.03489724, 0.03465677, 0.03441796,
0.03418079, 0.03394525, 0.03371134, 0.03347905, 0.03324835,
0.03301924, 0.03279171, 0.03256575, 0.03234134, 0.03211848,
0.03189716, 0.03167736, 0.03145908, 0.0312423 , 0.03102702,
0.03081322, 0.03060089, 0.03039002, 0.03018061, 0.02997264,
0.02976611, 0.02956099, 0.02935729, 0.029155 , 0.0289541 ,
0.02875458, 0.02855644, 0.02835966, 0.02816424, 0.02797016,
0.02777743, 0.02758602, 0.02739593, 0.02720715, 0.02701967,
0.02683348, 0.02664857, 0.02646494, 0.02628258, 0.02610147,
0.02592161, 0.02574299, 0.0255656 , 0.02538943, 0.02521448,
0.02504073, 0.02486818, 0.02469681, 0.02452663, 0.02435762,
0.02418978, 0.02402309, 0.02385755, 0.02369316, 0.02352989,
0.02336775, 0.02320673, 0.02304681, 0.022888 , 0.02273029,
0.02257366, 0.0224181 , 0.02226363, 0.02211021, 0.02195785,
0.02180655, 0.02165628, 0.02150705, 0.02135885, 0.02121167,
0.0210655 , 0.02092035, 0.02077619, 0.02063302, 0.02049084,
0.02034965, 0.02020942, 0.02007016, 0.01993186, 0.01979451,
0.01965811, 0.01952265, 0.01938813, 0.01925453, 0.01912185,
0.01899008, 0.01885922, 0.01872927, 0.01860021, 0.01847204,
0.01834475, 0.01821834, 0.0180928 , 0.01796813, 0.01784431,
0.01772135, 0.01759923, 0.01747796, 0.01735752, 0.01723792,
0.01711913, 0.01700117, 0.01688402, 0.01676767, 0.01665213,
0.01653738, 0.01642343, 0.01631026, 0.01619786, 0.01608625,
0.0159754 , 0.01586532, 0.01575599, 0.01564742, 0.0155396 ,
0.01543252, 0.01532617, 0.01522056, 0.01511568, 0.01501152,
0.01490808, 0.01480535, 0.01470333, 0.01460201, 0.01450139,
0.01440147, 0.01430223, 0.01420367, 0.0141058 , 0.0140086 ,
0.01391207, 0.0138162 , 0.013721 , 0.01362645, 0.01353255,
0.0134393 , 0.01334669, 0.01325472, 0.01316339, 0.01307268,
0.0129826 , 0.01289314, 0.01280429, 0.01271606, 0.01262844,
0.01254142, 0.012455 , 0.01236917, 0.01228394, 0.01219929,
0.01211523, 0.01203175, 0.01194884, 0.0118665 , 0.01178473,
0.01170352, 0.01162288, 0.01154278, 0.01146325, 0.01138425,
0.01130581, 0.0112279 , 0.01115053, 0.0110737 , 0.01099739,
0.01092161, 0.01084635, 0.01077161, 0.01069738, 0.01062367,
0.01055046, 0.01047776, 0.01040556, 0.01033386, 0.01026265,
0.01019193, 0.0101217 , 0.01005196, 0.00998269, 0.0099139 ,
0.00984559, 0.00977774, 0.00971036, 0.00964345, 0.009577 ,
0.00951101, 0.00944547, 0.00938038, 0.00931574, 0.00925155,
0.0091878 , 0.00912449, 0.00906161, 0.00899917, 0.00893716,
0.00887557, 0.00881441, 0.00875368, 0.00869336, 0.00863345,
0.00857396, 0.00851488, 0.0084562 , 0.00839793, 0.00834007,
0.0082826 , 0.00822552, 0.00816884, 0.00811255, 0.00805665,
0.00800113, 0.007946 , 0.00789124, 0.00783687, 0.00778286,
0.00772923, 0.00767597, 0.00762308, 0.00757055, 0.00751838,
0.00746657, 0.00741512, 0.00736403, 0.00731328, 0.00726289,
0.00721284, 0.00716314, 0.00711378, 0.00706476, 0.00701608,
0.00696773, 0.00691972, 0.00687204, 0.00682468, 0.00677765])