start h2o
library(h2o)
library(data.table)
h2o.init()
Connection successful!
R is connected to the H2O cluster:
H2O cluster uptime: 2 hours 31 minutes
H2O cluster version: 3.14.0.3
H2O cluster version age: 9 days
H2O cluster name: H2O_started_from_R_r631758_ajy644
H2O cluster total nodes: 1
H2O cluster total memory: 3.15 GB
H2O cluster total cores: 8
H2O cluster allowed cores: 8
H2O cluster healthy: TRUE
H2O Connection ip: localhost
H2O Connection port: 54321
H2O Connection proxy: NA
H2O Internal Security: FALSE
H2O API Extensions: Algos, AutoML, Core V3, Core V4
R Version: R version 3.4.2 (2017-09-28)
h2o.removeAll()
[1] 0
load system dataset
path=system.file("extdata","prostate.csv", package="h2o")
h2o.df<-h2o.importFile(path)
|
| | 0%
|
|=======================================================================| 100%
df.R<-as.data.frame(h2o.df)
fit linear regression model for prostate cancer data
predictors=c("AGE","RACE", "PSA", "GLEASON")
response="VOL"
model.gaussian<-h2o.glm(y=response, x=predictors, training_frame = h2o.df, family="gaussian")
|
| | 0%
|
|=======================================================================| 100%
model.gaussian
Model Details:
==============
H2ORegressionModel: glm
Model ID: GLM_model_R_1506968312150_58
GLM Model: summary
family link regularization
1 gaussian identity Elastic Net (alpha = 0.5, lambda = 0.003889 )
number_of_predictors_total number_of_active_predictors number_of_iterations
1 4 4 1
training_frame
1 prostate.hex_sid_b80f_20
Coefficients: glm coefficients
names coefficients standardized_coefficients
1 Intercept -2.285527 15.812921
2 AGE 0.310435 2.026232
3 RACE 4.680541 1.445226
4 PSA 0.029275 0.585439
5 GLEASON -1.243792 -1.358163
H2ORegressionMetrics: glm
** Reported on training data. **
MSE: 328.1284
RMSE: 18.11432
MAE: 14.5371
RMSLE: 1.920943
Mean Residual Deviance : 328.1284
R^2 : 0.02269798
Null Deviance :127584.7
Null D.o.F. :379
Residual Deviance :124688.8
Residual D.o.F. :375
AIC :3291.887
fit logistic regression for another response
is.factor(h2o.df$CAPSULE)
[1] FALSE
h2o.df$CAPSULE<-as.factor(h2o.df$CAPSULE)
model.logistic<-h2o.glm(y="CAPSULE", x=predictors, training_frame = h2o.df, family="binomial")
|
| | 0%
|
|=======================================================================| 100%
model.logistic
Model Details:
==============
H2OBinomialModel: glm
Model ID: GLM_model_R_1506968312150_59
GLM Model: summary
family link regularization
1 binomial logit Elastic Net (alpha = 0.5, lambda = 4.445E-4 )
number_of_predictors_total number_of_active_predictors number_of_iterations
1 4 4 4
training_frame
1 RTMP_sid_b80f_21
Coefficients: glm coefficients
names coefficients standardized_coefficients
1 Intercept -5.867604 -0.467143
2 AGE -0.020819 -0.135888
3 RACE -0.457165 -0.141160
4 PSA 0.027882 0.557565
5 GLEASON 1.071800 1.170356
H2OBinomialMetrics: glm
** Reported on training data. **
MSE: 0.1786802
RMSE: 0.4227058
LogLoss: 0.5289
Mean Per-Class Error: 0.2598975
AUC: 0.7927644
Gini: 0.5855288
R^2: 0.2571069
Residual Deviance: 401.964
AIC: 411.964
Confusion Matrix (vertical: actual; across: predicted) for F1-optimal threshold:
0 1 Error Rate
0 155 72 0.317181 =72/227
1 31 122 0.202614 =31/153
Totals 186 194 0.271053 =103/380
Maximum Metrics: Maximum metrics at their respective thresholds
metric threshold value idx
1 max f1 0.298968 0.703170 191
2 max f2 0.205231 0.803080 294
3 max f0point5 0.531385 0.687606 108
4 max accuracy 0.531385 0.736842 108
5 max precision 0.997166 1.000000 0
6 max recall 0.087936 1.000000 359
7 max specificity 0.997166 1.000000 0
8 max absolute_mcc 0.298968 0.471116 191
9 max min_per_class_accuracy 0.408870 0.713656 172
10 max mean_per_class_accuracy 0.298968 0.740103 191
Gains/Lift Table: Extract with `h2o.gainsLift(<model>, <data>)` or `h2o.gainsLift(<model>, valid=<T/F>, xval=<T/F>)`
multinomial modelling example
my understanding is that it is kind of ordinal logistic reg
how to explain the result, the coefficient looks different for each category?
The larger lambda is, the more the coefficients are shrunk toward zero
iris.h2o<-as.h2o(iris)
|
| | 0%
|
|=======================================================================| 100%
is.factor(iris.h2o$Species)
[1] TRUE
model.mul<-h2o.glm(y="Species", x=1:4, training_frame = iris.h2o,family="multinomial")
|
| | 0%
|
|=========================== | 38%
|
|=======================================================================| 100%
model.mul
Model Details:
==============
H2OMultinomialModel: glm
Model ID: GLM_model_R_1506968312150_61
GLM Model: summary
family link regularization
1 multinomial multinomial Elastic Net (alpha = 0.5, lambda = 8.671E-4 )
number_of_predictors_total number_of_active_predictors number_of_iterations
1 15 11 26
training_frame
1 iris
Coefficients: glm multinomial coefficients
names coefs_class_0 coefs_class_1 coefs_class_2 std_coefs_class_0
1 Intercept 6.496784 -0.408705 -18.679065 -3.969984
2 Sepal.Length -1.522256 1.109945 0.000000 -1.260529
3 Sepal.Width 3.757638 -0.684351 -3.575675 1.637828
4 Petal.Length -2.059447 -0.596759 3.326552 -3.635537
5 Petal.Width -4.436355 -1.466536 7.098211 -3.381557
std_coefs_class_1 std_coefs_class_2
1 -0.016699 -8.596793
2 0.919108 0.000000
3 -0.298285 -1.558516
4 -1.053457 5.872356
5 -1.117849 5.410524
H2OMultinomialMetrics: glm
** Reported on training data. **
Training Set Metrics:
=====================
Extract training frame with `h2o.getFrame("iris")`
MSE: (Extract with `h2o.mse`) 0.01469843
RMSE: (Extract with `h2o.rmse`) 0.1212371
Logloss: (Extract with `h2o.logloss`) 0.05728744
Mean Per-Class Error: 0.02
Null Deviance: (Extract with `h2o.nulldeviance`) 329.5837
Residual Deviance: (Extract with `h2o.residual_deviance`) 17.18623
R^2: (Extract with `h2o.r2`) 0.9779524
AIC: (Extract with `h2o.aic`) NaN
Confusion Matrix: Extract with `h2o.confusionMatrix(<model>,train = TRUE)`)
=========================================================================
Confusion Matrix: Row labels: Actual class; Column labels: Predicted class
setosa versicolor virginica Error Rate
setosa 50 0 0 0.0000 = 0 / 50
versicolor 0 48 2 0.0400 = 2 / 50
virginica 0 1 49 0.0200 = 1 / 50
Totals 50 49 51 0.0200 = 3 / 150
Hit Ratio Table: Extract with `h2o.hit_ratio_table(<model>,train = TRUE)`
=======================================================================
Top-3 Hit Ratios:
k hit_ratio
1 1 0.980000
2 2 1.000000
3 3 1.000000
possion model for insurance claim data
library(MASS)
data(Insurance)
#need change Ord.factor to factor in class
class(Insurance$Group) <- "factor"
class(Insurance$Age) <- "factor"
insurance.h2o<-as.h2o(Insurance)
|
| | 0%
|
|=======================================================================| 100%
model.poisson<-h2o.glm(y="Claims", x=c("District", "Group","Age"), training_frame = insurance.h2o,family="poisson", lambda=0,compute_p_values = T )
|
| | 0%
|
|=======================================================================| 100%
model.poisson
Model Details:
==============
H2ORegressionModel: glm
Model ID: GLM_model_R_1506968312150_62
GLM Model: summary
family link regularization number_of_predictors_total
1 poisson log None 9
number_of_active_predictors number_of_iterations training_frame
1 9 6 Insurance
Coefficients: glm coefficients
names coefficients std_error z_value p_value
1 Intercept 4.400347 0.057046 77.136215 0.000000
2 District.2 -0.438219 0.042970 -10.198175 0.000000
3 District.3 -0.915205 0.050323 -18.186521 0.000000
4 District.4 -1.443666 0.061576 -23.445286 0.000000
5 Group.1.5-2l -0.518904 0.042993 -12.069485 0.000000
6 Group.<1l -0.989603 0.050447 -19.616527 0.000000
7 Group.>2l -1.578875 0.063515 -24.858362 0.000000
8 Age.30-35 0.114477 0.068431 1.672894 0.094348
9 Age.<25 -0.567693 0.082717 -6.863095 0.000000
10 Age.>35 1.631471 0.054401 29.989514 0.000000
standardized_coefficients
1 4.400347
2 -0.438219
3 -0.915205
4 -1.443666
5 -0.518904
6 -0.989603
7 -1.578875
8 0.114477
9 -0.567693
10 1.631471
H2ORegressionMetrics: glm
** Reported on training data. **
MSE: 69.76565
RMSE: 8.352583
MAE: 5.888571
RMSLE: 0.3498097
Mean Residual Deviance : 1.895504
R^2 : 0.9860048
Null Deviance :4236.679
Null D.o.F. :63
Residual Deviance :121.3123
Residual D.o.F. :54
AIC :458.6257
#without P value
model.poisson<-h2o.glm(y="Claims", x=c("District", "Group","Age"), training_frame = insurance.h2o,family="poisson" )
|
| | 0%
|
|=======================================================================| 100%
model.poisson
Model Details:
==============
H2ORegressionModel: glm
Model ID: GLM_model_R_1506968312150_63
GLM Model: summary
family link regularization
1 poisson log Elastic Net (alpha = 0.5, lambda = 3.9914 )
number_of_predictors_total number_of_active_predictors number_of_iterations
1 12 9 6
training_frame
1 Insurance
Coefficients: glm coefficients
names coefficients standardized_coefficients
1 Intercept 3.316726 3.316726
2 District.1 0.464501 0.464501
3 District.2 0.014646 0.014646
4 District.3 -0.082078 -0.082078
5 District.4 -0.397069 -0.397069
6 Group.1-1.5l 0.530945 0.530945
7 Group.1.5-2l 0.000000 0.000000
8 Group.<1l -0.084988 -0.084988
9 Group.>2l -0.427080 -0.427080
10 Age.25-29 0.000000 0.000000
11 Age.30-35 0.000000 0.000000
12 Age.<25 -0.243187 -0.243187
13 Age.>35 1.277417 1.277417
H2ORegressionMetrics: glm
** Reported on training data. **
MSE: 784.9197
RMSE: 28.01642
MAE: 16.6272
RMSLE: 0.7233781
Mean Residual Deviance : 8.976903
R^2 : 0.8425425
Null Deviance :4236.679
Null D.o.F. :63
Residual Deviance :574.5218
Residual D.o.F. :54
AIC :911.8352
gamma model
gamma.inverse <- h2o.glm(y = "DPROS", x = c("AGE","RACE","CAPSULE","DCAPS","PSA","VOL"), training_frame = h2o.df, family = "gamma", link = "inverse"
)
|
| | 0%
|
|=======================================================================| 100%
gamma.inverse
Model Details:
==============
H2ORegressionModel: glm
Model ID: GLM_model_R_1506968312150_64
GLM Model: summary
family link regularization
1 gamma inverse Elastic Net (alpha = 0.5, lambda = 4.894E-4 )
number_of_predictors_total number_of_active_predictors number_of_iterations
1 7 7 4
training_frame
1 RTMP_sid_b80f_21
Coefficients: glm coefficients
names coefficients standardized_coefficients
1 Intercept 0.486080 0.439020
2 CAPSULE.0 0.052828 0.052828
3 CAPSULE.1 -0.047643 -0.047643
4 AGE 0.001049 0.006845
5 RACE -0.029714 -0.009175
6 DCAPS -0.068706 -0.021344
7 PSA -0.000641 -0.012816
8 VOL 0.000125 0.002291
H2ORegressionMetrics: glm
** Reported on training data. **
MSE: 0.850493
RMSE: 0.9222218
MAE: 0.7474297
RMSLE: 0.2947758
Mean Residual Deviance : 0.1909795
R^2 : 0.1474464
Null Deviance :82.5134
Null D.o.F. :379
Residual Deviance :72.5722
Residual D.o.F. :372
AIC :NaN
gamma.log <- h2o.glm(y="DPROS", x = c("AGE","RACE","CAPSULE","DCAPS","PSA","VOL"), training_frame =
h2o.df, family = "gamma", link = "log")
|
| | 0%
|
|=======================================================================| 100%
gamma.inverse
Model Details:
==============
H2ORegressionModel: glm
Model ID: GLM_model_R_1506968312150_64
GLM Model: summary
family link regularization
1 gamma inverse Elastic Net (alpha = 0.5, lambda = 4.894E-4 )
number_of_predictors_total number_of_active_predictors number_of_iterations
1 7 7 4
training_frame
1 RTMP_sid_b80f_21
Coefficients: glm coefficients
names coefficients standardized_coefficients
1 Intercept 0.486080 0.439020
2 CAPSULE.0 0.052828 0.052828
3 CAPSULE.1 -0.047643 -0.047643
4 AGE 0.001049 0.006845
5 RACE -0.029714 -0.009175
6 DCAPS -0.068706 -0.021344
7 PSA -0.000641 -0.012816
8 VOL 0.000125 0.002291
H2ORegressionMetrics: glm
** Reported on training data. **
MSE: 0.850493
RMSE: 0.9222218
MAE: 0.7474297
RMSLE: 0.2947758
Mean Residual Deviance : 0.1909795
R^2 : 0.1474464
Null Deviance :82.5134
Null D.o.F. :379
Residual Deviance :72.5722
Residual D.o.F. :372
AIC :NaN
tweedie model
library(HDtweedie)
data(auto)
dim(auto$x)
[1] 2812 56
hist(auto$y)

auto.h2o<-as.h2o(auto)
|
| | 0%
|
|=======================================================================| 100%
vars=paste("x.", colnames(auto$x), sep="")
vars
[1] "x.CAR_TYPE_2" "x.CAR_TYPE_3" "x.CAR_TYPE_4" "x.CAR_TYPE_5" "x.CAR_TYPE_6"
[6] "x.JOBCLASS_3" "x.JOBCLASS_4" "x.JOBCLASS_5" "x.JOBCLASS_6" "x.JOBCLASS_7"
[11] "x.JOBCLASS_8" "x.JOBCLASS_9" "x.MAX_EDUC_2" "x.MAX_EDUC_3" "x.MAX_EDUC_4"
[16] "x.MAX_EDUC_5" "x.KIDSDRIV" "x.KIDSDRIV2" "x.KIDSDRIV3" "x.TRAVTIME"
[21] "x.TRAVTIME2" "x.TRAVTIME3" "x.BLUEBOOK" "x.BLUEBOOK2" "x.BLUEBOOK3"
[26] "x.NPOLICY" "x.NPOLICY2" "x.NPOLICY3" "x.MVR_PTS" "x.MVR_PTS2"
[31] "x.MVR_PTS3" "x.AGE" "x.AGE2" "x.AGE3" "x.HOMEKIDS"
[36] "x.HOMEKIDS2" "x.HOMEKIDS3" "x.YOJ" "x.YOJ2" "x.YOJ3"
[41] "x.INCOME" "x.INCOME2" "x.INCOME3" "x.HOME_VAL" "x.HOME_VAL2"
[46] "x.HOME_VAL3" "x.SAMEHOME" "x.SAMEHOME2" "x.SAMEHOME3" "x.CAR_USE"
[51] "x.RED_CAR" "x.REVOLKED" "x.GENDER" "x.MARRIED" "x.PARENT1"
[56] "x.AREA"
model.tweedie=h2o.glm(y="y", x=vars, training_frame = auto.h2o, family="tweedie")
|
| | 0%
|
|========= | 12%
|
|=======================================================================| 100%
model.tweedie
Model Details:
==============
H2ORegressionModel: glm
Model ID: GLM_model_R_1506968312150_66
GLM Model: summary
family link regularization
1 tweedie tweedie Elastic Net (alpha = 0.5, lambda = 0.00707 )
number_of_predictors_total number_of_active_predictors number_of_iterations
1 56 52 4
training_frame
1 auto
Coefficients: glm coefficients
names coefficients standardized_coefficients
1 Intercept 0.863057 4.112271
2 x.CAR_TYPE_2 0.189050 0.071024
3 x.CAR_TYPE_3 0.226833 0.102243
4 x.CAR_TYPE_4 1.018826 0.330952
5 x.CAR_TYPE_5 -0.147410 -0.066913
---
names coefficients standardized_coefficients
52 x.RED_CAR 0.063559 0.028627
53 x.REVOLKED 9.622193 3.315487
54 x.GENDER -0.359685 -0.178980
55 x.MARRIED -0.307056 -0.149801
56 x.PARENT1 -0.324900 -0.110097
57 x.AREA 1.570891 0.642906
H2ORegressionMetrics: glm
** Reported on training data. **
MSE: 59.19431
RMSE: 7.693784
MAE: 4.462433
RMSLE: NaN
Mean Residual Deviance : 59.19431
R^2 : 0.2469894
Null Deviance :221051.9
Null D.o.F. :2811
Residual Deviance :166454.4
Residual D.o.F. :2759
AIC :NaN
parameter adjust in binomial model
# airline.h2o<-h2o.importFile("http://s3.amazonaws.com/h2o-public-test-data/smallldata/airlines/allyears2k_headers.zip")
airlines<-fread("C:\\Users\\r631758\\Desktop\\r631758\\R codes\\H2O\\exercise\\allyears2k_headers.csv")
airlines$IsDepDelayed<-as.factor(airlines$IsDepDelayed)
airlines$Origin<-as.factor(airlines$Origin)
airline.h2o<-as.h2o(airlines)
|
| | 0%
|
|=======================================================================| 100%
#stops the model wehn we reach 10 active predictors
model.bin<-h2o.glm(y="IsDepDelayed", x=c("Year", "Origin"), training_frame=airline.h2o,family="binomial", lambda_search=TRUE, max_active_predictors = 10 )
|
| | 0%
|
|========== | 14%
|
|=======================================================================| 100%
print(model.bin)
Model Details:
==============
H2OBinomialModel: glm
Model ID: GLM_model_R_1506968312150_67
GLM Model: summary
family link regularization
1 binomial logit Elastic Net (alpha = 0.5, lambda = 0.01586 )
lambda_search
1 nlambda = 100, lambda.max = 0.05832, lambda.min = 0.01586, lambda.1se = -1.0
number_of_predictors_total number_of_active_predictors number_of_iterations
1 133 1 15
training_frame
1 airlines
Coefficients: glm coefficients
names coefficients standardized_coefficients
1 Intercept 26.109626 0.100487
2 Origin.ABE 0.000000 0.000000
3 Origin.ABQ 0.000000 0.000000
4 Origin.ACY 0.000000 0.000000
5 Origin.ALB 0.000000 0.000000
---
names coefficients standardized_coefficients
129 Origin.TRI 0.000000 0.000000
130 Origin.TUL 0.000000 0.000000
131 Origin.TUS 0.000000 0.000000
132 Origin.TYS 0.000000 0.000000
133 Origin.UCA 0.000000 0.000000
134 Year -0.013021 -0.082609
H2OBinomialMetrics: glm
** Reported on training data. **
MSE: 0.2485974
RMSE: 0.4985955
LogLoss: 0.6903323
Mean Per-Class Error: 0.5
AUC: 0.5337234
Gini: 0.06744684
R^2: 0.003106494
Residual Deviance: 60718.86
AIC: 60722.86
Confusion Matrix (vertical: actual; across: predicted) for F1-optimal threshold:
NO YES Error Rate
NO 0 20887 1.000000 =20887/20887
YES 0 23091 0.000000 =0/23091
Totals 0 43978 0.474942 =20887/43978
Maximum Metrics: Maximum metrics at their respective thresholds
metric threshold value idx
1 max f1 0.490943 0.688574 21
2 max f2 0.490943 0.846804 21
3 max f0point5 0.520228 0.583758 12
4 max accuracy 0.526724 0.562781 10
5 max precision 0.559025 0.604302 0
6 max recall 0.490943 1.000000 21
7 max specificity 0.559025 0.962130 0
8 max absolute_mcc 0.497452 0.160897 19
9 max min_per_class_accuracy 0.526724 0.559785 10
10 max mean_per_class_accuracy 0.526724 0.562939 10
Gains/Lift Table: Extract with `h2o.gainsLift(<model>, <data>)` or `h2o.gainsLift(<model>, valid=<T/F>, xval=<T/F>)`
example to remove collinear variables
a=runif(100)
b=2*a
c=-3*a+10
df=data.frame(a,b,c)
df.h2o<-as.h2o(df)
|
| | 0%
|
|=======================================================================| 100%
h2o.fit=h2o.glm(y="c", x=c("a","b"), training_frame = df.h2o, lambda=0,remove_collinear_columns = TRUE)
|
| | 0%
|
|=======================================================================| 100%
h2o.fit
Model Details:
==============
H2ORegressionModel: glm
Model ID: GLM_model_R_1506968312150_69
GLM Model: summary
family link regularization number_of_predictors_total
1 gaussian identity None 2
number_of_active_predictors number_of_iterations training_frame
1 1 1 df
Coefficients: glm coefficients
names coefficients standardized_coefficients
1 Intercept 10.000000 8.537735
2 a -3.000000 -0.875174
3 b 0.000000 0.000000
H2ORegressionMetrics: glm
** Reported on training data. **
MSE: 5.808223e-14
RMSE: 2.410025e-07
MAE: 2.02423e-07
RMSLE: 2.46524e-08
Mean Residual Deviance : 5.808223e-14
R^2 : 1
Null Deviance :75.82696
Null D.o.F. :99
Residual Deviance :5.808223e-12
Residual D.o.F. :98
AIC :-2757.904
#show P value
h2o.fit=h2o.glm(y="c", x=c("a","b"), training_frame = df.h2o, lambda=0,remove_collinear_columns = TRUE, compute_p_values = TRUE)
|
| | 0%
|
|=======================================================================| 100%
h2o.fit
Model Details:
==============
H2ORegressionModel: glm
Model ID: GLM_model_R_1506968312150_70
GLM Model: summary
family link regularization number_of_predictors_total
1 gaussian identity None 2
number_of_active_predictors number_of_iterations training_frame
1 1 1 df
Coefficients: glm coefficients
names coefficients std_error z_value p_value
1 Intercept 10.000000 0.000000 16693726276680328.000000 0.000000
2 a -3.000000 0.000000 -2841117515105541.000000 0.000000
3 b 0.000000
standardized_coefficients
1 8.537735
2 -0.875174
3 0.000000
H2ORegressionMetrics: glm
** Reported on training data. **
MSE: 5.808223e-14
RMSE: 2.410025e-07
MAE: 2.02423e-07
RMSLE: 2.46524e-08
Mean Residual Deviance : 5.808223e-14
R^2 : 1
Null Deviance :75.82696
Null D.o.F. :99
Residual Deviance :5.808223e-12
Residual D.o.F. :98
AIC :-2757.904
CROSS VALIDATION
path=system.file("extdata","prostate.csv", package="h2o")
h2o.df<-h2o.importFile(path)
|
| | 0%
|
|=======================================================================| 100%
df.R<-as.data.frame(h2o.df)
is.factor(h2o.df$CAPSULE)
[1] FALSE
h2o.df$CAPSULE<-as.factor(h2o.df$CAPSULE)
binomial.fit<-h2o.glm(y = "CAPSULE", x = c("AGE", "RACE", "PSA", "GLEASON"), training_frame = h2o.df, family = "binomial", nfolds = 5)
|
| | 0%
|
|=======================================================================| 100%
binomial.fit
Model Details:
==============
H2OBinomialModel: glm
Model ID: GLM_model_R_1506968312150_71
GLM Model: summary
family link regularization
1 binomial logit Elastic Net (alpha = 0.5, lambda = 4.445E-4 )
number_of_predictors_total number_of_active_predictors number_of_iterations
1 4 4 4
training_frame
1 RTMP_sid_b80f_28
Coefficients: glm coefficients
names coefficients standardized_coefficients
1 Intercept -5.867604 -0.467143
2 AGE -0.020819 -0.135888
3 RACE -0.457165 -0.141160
4 PSA 0.027882 0.557565
5 GLEASON 1.071800 1.170356
H2OBinomialMetrics: glm
** Reported on training data. **
MSE: 0.1786802
RMSE: 0.4227058
LogLoss: 0.5289
Mean Per-Class Error: 0.2598975
AUC: 0.7927644
Gini: 0.5855288
R^2: 0.2571069
Residual Deviance: 401.964
AIC: 411.964
Confusion Matrix (vertical: actual; across: predicted) for F1-optimal threshold:
0 1 Error Rate
0 155 72 0.317181 =72/227
1 31 122 0.202614 =31/153
Totals 186 194 0.271053 =103/380
Maximum Metrics: Maximum metrics at their respective thresholds
metric threshold value idx
1 max f1 0.298968 0.703170 191
2 max f2 0.205231 0.803080 294
3 max f0point5 0.531385 0.687606 108
4 max accuracy 0.531385 0.736842 108
5 max precision 0.997166 1.000000 0
6 max recall 0.087936 1.000000 359
7 max specificity 0.997166 1.000000 0
8 max absolute_mcc 0.298968 0.471116 191
9 max min_per_class_accuracy 0.408870 0.713656 172
10 max mean_per_class_accuracy 0.298968 0.740103 191
Gains/Lift Table: Extract with `h2o.gainsLift(<model>, <data>)` or `h2o.gainsLift(<model>, valid=<T/F>, xval=<T/F>)`
H2OBinomialMetrics: glm
** Reported on cross-validation data. **
** 5-fold cross-validation on training data (Metrics computed for combined holdout predictions) **
MSE: 0.1840359
RMSE: 0.428994
LogLoss: 0.5414469
Mean Per-Class Error: 0.2805707
AUC: 0.7805707
Gini: 0.5611413
R^2: 0.2348397
Residual Deviance: 411.4997
AIC: 421.4997
Confusion Matrix (vertical: actual; across: predicted) for F1-optimal threshold:
0 1 Error Rate
0 156 71 0.312775 =71/227
1 38 115 0.248366 =38/153
Totals 194 186 0.286842 =109/380
Maximum Metrics: Maximum metrics at their respective thresholds
metric threshold value idx
1 max f1 0.326248 0.678466 185
2 max f2 0.209593 0.797342 290
3 max f0point5 0.506358 0.669711 125
4 max accuracy 0.506358 0.728947 125
5 max precision 0.997722 1.000000 0
6 max recall 0.081435 1.000000 362
7 max specificity 0.997722 1.000000 0
8 max absolute_mcc 0.326248 0.430552 185
9 max min_per_class_accuracy 0.430166 0.712418 172
10 max mean_per_class_accuracy 0.326248 0.719429 185
Gains/Lift Table: Extract with `h2o.gainsLift(<model>, <data>)` or `h2o.gainsLift(<model>, valid=<T/F>, xval=<T/F>)`
Cross-Validation Metrics Summary:
mean sd cv_1_valid cv_2_valid cv_3_valid cv_4_valid
accuracy 0.74392027 0.031016229 0.7671233 0.75 0.67105263 0.8030303
auc 0.7891558 0.016868321 0.81 0.81121284 0.7586207 0.8043685
err 0.25607973 0.031016229 0.23287672 0.25 0.32894737 0.1969697
err_count 19.6 2.9529645 17.0 21.0 25.0 13.0
f0point5 0.6795532 0.04458115 0.6535948 0.7 0.5895197 0.7826087
cv_5_valid
accuracy 0.72839504
auc 0.76157695
err 0.27160493
err_count 22.0
f0point5 0.672043
---
mean sd cv_1_valid cv_2_valid cv_3_valid
precision 0.6602908 0.06375785 0.625 0.6603774 0.54
r2 0.23255497 0.03136122 0.2676437 0.24247195 0.16870648
recall 0.81080955 0.07294119 0.8 0.92105263 0.9310345
residual_deviance 82.299934 7.252882 72.21169 91.974174 87.61202
rmse 0.4279206 0.010554106 0.40609625 0.43320233 0.44290596
specificity 0.6980348 0.09284596 0.75 0.6086956 0.5106383
cv_4_valid cv_5_valid
precision 0.8181818 0.65789473
r2 0.28808242 0.19587028
recall 0.6666667 0.7352941
residual_deviance 67.79964 91.902145
rmse 0.41484427 0.44255415
specificity 0.8974359 0.7234042
see one more logistic regression
path = system.file("extdata", "prostate.csv", package= "h2o")
h2o_df = h2o.importFile(path)
|
| | 0%
|
|=======================================================================| 100%
h2o_df$CAPSULE = as.factor(h2o_df$CAPSULE)
rand_vec <- h2o.runif(h2o_df, seed = 1234)
train <- h2o_df[rand_vec <= 0.8,]
valid <- h2o_df[rand_vec > 0.8,]
binomial.fit = h2o.glm(y = "CAPSULE", x = c("AGE", "RACE", "PSA", "GLEASON"), training_frame = train,validation_frame = valid, family ="binomial")
|
| | 0%
|
|=======================================================================| 100%
print(binomial.fit)
Model Details:
==============
H2OBinomialModel: glm
Model ID: GLM_model_R_1506968312150_89
GLM Model: summary
family link regularization
1 binomial logit Elastic Net (alpha = 0.5, lambda = 4.906E-4 )
number_of_predictors_total number_of_active_predictors number_of_iterations
1 4 4 4
training_frame
1 RTMP_sid_b80f_32
Coefficients: glm coefficients
names coefficients standardized_coefficients
1 Intercept -6.763082 -0.351132
2 AGE -0.014531 -0.092497
3 RACE -0.534172 -0.161001
4 PSA 0.025826 0.528141
5 GLEASON 1.174225 1.168650
H2OBinomialMetrics: glm
** Reported on training data. **
MSE: 0.1767783
RMSE: 0.4204501
LogLoss: 0.524557
Mean Per-Class Error: 0.2580786
AUC: 0.7993424
Gini: 0.5986848
R^2: 0.2744021
Residual Deviance: 322.078
AIC: 332.078
Confusion Matrix (vertical: actual; across: predicted) for F1-optimal threshold:
0 1 Error Rate
0 122 56 0.314607 =56/178
1 26 103 0.201550 =26/129
Totals 148 159 0.267101 =82/307
Maximum Metrics: Maximum metrics at their respective thresholds
metric threshold value idx
1 max f1 0.293579 0.715278 157
2 max f2 0.220635 0.804749 240
3 max f0point5 0.559468 0.717256 87
4 max accuracy 0.559468 0.742671 87
5 max precision 0.997360 1.000000 0
6 max recall 0.087348 1.000000 293
7 max specificity 0.997360 1.000000 0
8 max absolute_mcc 0.293579 0.477947 157
9 max min_per_class_accuracy 0.428468 0.724719 141
10 max mean_per_class_accuracy 0.293579 0.741921 157
Gains/Lift Table: Extract with `h2o.gainsLift(<model>, <data>)` or `h2o.gainsLift(<model>, valid=<T/F>, xval=<T/F>)`
H2OBinomialMetrics: glm
** Reported on validation data. **
MSE: 0.1900406
RMSE: 0.4359365
LogLoss: 0.5537088
Mean Per-Class Error: 0.2759354
AUC: 0.7704082
Gini: 0.5408163
R^2: 0.138838
Residual Deviance: 80.84149
AIC: 90.84149
Confusion Matrix (vertical: actual; across: predicted) for F1-optimal threshold:
0 1 Error Rate
0 24 25 0.510204 =25/49
1 1 23 0.041667 =1/24
Totals 25 48 0.356164 =26/73
Maximum Metrics: Maximum metrics at their respective thresholds
metric threshold value idx
1 max f1 0.246031 0.638889 47
2 max f2 0.231766 0.805369 52
3 max f0point5 0.530000 0.585938 25
4 max accuracy 0.539814 0.726027 23
5 max precision 0.985975 1.000000 0
6 max recall 0.231766 1.000000 52
7 max specificity 0.985975 1.000000 0
8 max absolute_mcc 0.246031 0.443625 47
9 max min_per_class_accuracy 0.410158 0.693878 31
10 max mean_per_class_accuracy 0.246031 0.724065 47
Gains/Lift Table: Extract with `h2o.gainsLift(<model>, <data>)` or `h2o.gainsLift(<model>, valid=<T/F>, xval=<T/F>)`
Coefficients
binomial.fit@model$coefficients
Intercept AGE RACE PSA GLEASON
-6.76308189 -0.01453091 -0.53417212 0.02582645 1.17422540
binomial.fit@model$coefficients_table
Coefficients: glm coefficients
names coefficients standardized_coefficients
1 Intercept -6.763082 -0.351132
2 AGE -0.014531 -0.092497
3 RACE -0.534172 -0.161001
4 PSA 0.025826 0.528141
5 GLEASON 1.174225 1.168650
h2o.confusionMatrix(binomial.fit, valid = FALSE)
Confusion Matrix (vertical: actual; across: predicted) for max f1 @ threshold = 0.293579041147606:
0 1 Error Rate
0 122 56 0.314607 =56/178
1 26 103 0.201550 =26/129
Totals 148 159 0.267101 =82/307
predict function
valid<-h2o_df[(rand_vec>0.8)& (rand_vec<=0.9),]
test<-h2o_df[rand_vec>0.9,]
binomial.fit = h2o.glm(y = "CAPSULE", x = c("AGE", "RACE", "PSA", "GLEASON"), training_frame = train,validation_frame = valid, family = "binomial")
|
| | 0%
|
|=======================================================================| 100%
print(binomial.fit)
Model Details:
==============
H2OBinomialModel: glm
Model ID: GLM_model_R_1506968312150_97
GLM Model: summary
family link regularization
1 binomial logit Elastic Net (alpha = 0.5, lambda = 4.906E-4 )
number_of_predictors_total number_of_active_predictors number_of_iterations
1 4 4 4
training_frame
1 RTMP_sid_b80f_32
Coefficients: glm coefficients
names coefficients standardized_coefficients
1 Intercept -6.763082 -0.351132
2 AGE -0.014531 -0.092497
3 RACE -0.534172 -0.161001
4 PSA 0.025826 0.528141
5 GLEASON 1.174225 1.168650
H2OBinomialMetrics: glm
** Reported on training data. **
MSE: 0.1767783
RMSE: 0.4204501
LogLoss: 0.524557
Mean Per-Class Error: 0.2580786
AUC: 0.7993424
Gini: 0.5986848
R^2: 0.2744021
Residual Deviance: 322.078
AIC: 332.078
Confusion Matrix (vertical: actual; across: predicted) for F1-optimal threshold:
0 1 Error Rate
0 122 56 0.314607 =56/178
1 26 103 0.201550 =26/129
Totals 148 159 0.267101 =82/307
Maximum Metrics: Maximum metrics at their respective thresholds
metric threshold value idx
1 max f1 0.293579 0.715278 157
2 max f2 0.220635 0.804749 240
3 max f0point5 0.559468 0.717256 87
4 max accuracy 0.559468 0.742671 87
5 max precision 0.997360 1.000000 0
6 max recall 0.087348 1.000000 293
7 max specificity 0.997360 1.000000 0
8 max absolute_mcc 0.293579 0.477947 157
9 max min_per_class_accuracy 0.428468 0.724719 141
10 max mean_per_class_accuracy 0.293579 0.741921 157
Gains/Lift Table: Extract with `h2o.gainsLift(<model>, <data>)` or `h2o.gainsLift(<model>, valid=<T/F>, xval=<T/F>)`
H2OBinomialMetrics: glm
** Reported on validation data. **
MSE: 0.1575926
RMSE: 0.3969793
LogLoss: 0.4660339
Mean Per-Class Error: 0.1904762
AUC: 0.8441558
Gini: 0.6883117
R^2: 0.3014077
Residual Deviance: 29.82617
AIC: 39.82617
Confusion Matrix (vertical: actual; across: predicted) for F1-optimal threshold:
0 1 Error Rate
0 13 8 0.380952 =8/21
1 0 11 0.000000 =0/11
Totals 13 19 0.250000 =8/32
Maximum Metrics: Maximum metrics at their respective thresholds
metric threshold value idx
1 max f1 0.259624 0.733333 18
2 max f2 0.259624 0.873016 18
3 max f0point5 0.512972 0.727273 10
4 max accuracy 0.512972 0.812500 10
5 max precision 0.897733 1.000000 0
6 max recall 0.259624 1.000000 18
7 max specificity 0.897733 1.000000 0
8 max absolute_mcc 0.259624 0.598662 18
9 max min_per_class_accuracy 0.298221 0.761905 13
10 max mean_per_class_accuracy 0.259624 0.809524 18
Gains/Lift Table: Extract with `h2o.gainsLift(<model>, <data>)` or `h2o.gainsLift(<model>, valid=<T/F>, xval=<T/F>)`
#make and export predictions
pred=h2o.predict(binomial.fit, test)
|
| | 0%
|
|=======================================================================| 100%
test.R<-as.data.frame(test)
pred
predict p0 p1
1 1 0.3529455 0.6470545
2 0 0.8082117 0.1917883
3 1 0.7239732 0.2760268
4 1 0.5898419 0.4101581
5 1 0.4947335 0.5052665
6 1 0.2206710 0.7793290
[41 rows x 3 columns]
pred.R<-as.data.frame(pred)
# h2o.exportFile(pred, "C:\\Users\\r631758\\Desktop\\r631758\\R codes\\H2O\\exercise\\pred.csv")
#calculate metrics
pref=h2o.performance(binomial.fit,test)
pref
H2OBinomialMetrics: glm
MSE: 0.2153659
RMSE: 0.4640754
LogLoss: 0.622138
Mean Per-Class Error: 0.2912088
AUC: 0.7335165
Gini: 0.467033
R^2: 0.005411726
Residual Deviance: 51.01532
AIC: 61.01532
Confusion Matrix (vertical: actual; across: predicted) for F1-optimal threshold:
0 1 Error Rate
0 16 12 0.428571 =12/28
1 2 11 0.153846 =2/13
Totals 18 23 0.341463 =14/41
Maximum Metrics: Maximum metrics at their respective thresholds
metric threshold value idx
1 max f1 0.276532 0.611111 22
2 max f2 0.231766 0.755814 33
3 max f0point5 0.702216 0.612245 8
4 max accuracy 0.702216 0.756098 8
5 max precision 0.985975 1.000000 0
6 max recall 0.231766 1.000000 33
7 max specificity 0.985975 1.000000 0
8 max absolute_mcc 0.702216 0.398422 8
9 max min_per_class_accuracy 0.546377 0.615385 15
10 max mean_per_class_accuracy 0.276532 0.708791 22
Gains/Lift Table: Extract with `h2o.gainsLift(<model>, <data>)` or `h2o.gainsLift(<model>, valid=<T/F>, xval=<T/F>)`
whole example
airlines.h2o<-h2o.importFile("http://s3.amazonaws.com/h2o-public-test-data/smalldata/airlines/allyears2k_headers.zip")
|
| | 0%
|
|=======================================================================| 100%
model = h2o.glm(y = "IsDepDelayed", x = c("Year","Origin"), training_frame = airlines.h2o,family = "binomial", nfolds = 5)
|
| | 0%
|
|============================================================== | 87%
|
|=======================================================================| 100%
print(paste("full model training auc:",model@model$training_metrics@metrics$AUC))
[1] "full model training auc: 0.634873567120227"
print(paste("full model cv auc:", model@model$cross_validation_metrics@metrics$AUC))
[1] "full model cv auc: 0.628851458142331"
for ( i in 1:5){
cv_model_name=model@model$cross_validation_models[[i]]$name
cv_model=h2o.getModel(cv_model_name)
print (paste ("cv fold", i, "training auc:", cv_model@model$training_metrics@metrics$AUC, "validation auc: ", cv_model@model$validation_metrics@metrics$AUC))
}
[1] "cv fold 1 training auc: 0.636602101975204 validation auc: 0.623484510803242"
[1] "cv fold 2 training auc: 0.634553986745846 validation auc: 0.62953249244805"
[1] "cv fold 3 training auc: 0.635125978081935 validation auc: 0.628089759202146"
[1] "cv fold 4 training auc: 0.632851269882599 validation auc: 0.635450456795434"
[1] "cv fold 5 training auc: 0.63518039191565 validation auc: 0.628495508054523"
LS0tDQp0aXRsZTogIkdMTSBoMm8iDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQojc3RhcnQgaDJvDQpgYGB7cn0NCmxpYnJhcnkoaDJvKQ0KbGlicmFyeShkYXRhLnRhYmxlKQ0KaDJvLmluaXQoKQ0KaDJvLnJlbW92ZUFsbCgpDQpgYGANCg0KI2xvYWQgc3lzdGVtIGRhdGFzZXQNCmBgYHtyfQ0KcGF0aD1zeXN0ZW0uZmlsZSgiZXh0ZGF0YSIsInByb3N0YXRlLmNzdiIsIHBhY2thZ2U9ImgybyIpDQpoMm8uZGY8LWgyby5pbXBvcnRGaWxlKHBhdGgpDQpkZi5SPC1hcy5kYXRhLmZyYW1lKGgyby5kZikNCmBgYA0KDQojZml0IGxpbmVhciByZWdyZXNzaW9uIG1vZGVsIGZvciBwcm9zdGF0ZSBjYW5jZXIgZGF0YQ0KYGBge3J9DQpwcmVkaWN0b3JzPWMoIkFHRSIsIlJBQ0UiLCAiUFNBIiwgIkdMRUFTT04iKQ0KcmVzcG9uc2U9IlZPTCINCm1vZGVsLmdhdXNzaWFuPC1oMm8uZ2xtKHk9cmVzcG9uc2UsIHg9cHJlZGljdG9ycywgdHJhaW5pbmdfZnJhbWUgPSBoMm8uZGYsIGZhbWlseT0iZ2F1c3NpYW4iKQ0KbW9kZWwuZ2F1c3NpYW4NCmBgYA0KDQojZml0IGxvZ2lzdGljIHJlZ3Jlc3Npb24gZm9yIGFub3RoZXIgcmVzcG9uc2UNCmBgYHtyfQ0KaXMuZmFjdG9yKGgyby5kZiRDQVBTVUxFKQ0KaDJvLmRmJENBUFNVTEU8LWFzLmZhY3RvcihoMm8uZGYkQ0FQU1VMRSkNCm1vZGVsLmxvZ2lzdGljPC1oMm8uZ2xtKHk9IkNBUFNVTEUiLCB4PXByZWRpY3RvcnMsIHRyYWluaW5nX2ZyYW1lID0gaDJvLmRmLCBmYW1pbHk9ImJpbm9taWFsIikNCm1vZGVsLmxvZ2lzdGljDQpgYGANCg0KI211bHRpbm9taWFsIG1vZGVsbGluZyBleGFtcGxlDQojbXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGl0IGlzIGtpbmQgb2Ygb3JkaW5hbCBsb2dpc3RpYyByZWcNCiNob3cgdG8gZXhwbGFpbiB0aGUgcmVzdWx0LCB0aGUgY29lZmZpY2llbnQgbG9va3MgZGlmZmVyZW50IGZvciBlYWNoIGNhdGVnb3J5Pw0KI1RoZSBsYXJnZXIgbGFtYmRhIGlzLCB0aGUgbW9yZSB0aGUgY29lZmZpY2llbnRzIGFyZSBzaHJ1bmsgdG93YXJkIHplcm8NCmBgYHtyfQ0KaXJpcy5oMm88LWFzLmgybyhpcmlzKQ0KaXMuZmFjdG9yKGlyaXMuaDJvJFNwZWNpZXMpDQptb2RlbC5tdWw8LWgyby5nbG0oeT0iU3BlY2llcyIsIHg9MTo0LCB0cmFpbmluZ19mcmFtZSA9IGlyaXMuaDJvLGZhbWlseT0ibXVsdGlub21pYWwiKQ0KbW9kZWwubXVsDQpgYGANCg0KI3Bvc3Npb24gbW9kZWwgZm9yIGluc3VyYW5jZSBjbGFpbSBkYXRhDQpgYGB7cn0NCmxpYnJhcnkoTUFTUykNCmRhdGEoSW5zdXJhbmNlKQ0KI25lZWQgY2hhbmdlIE9yZC5mYWN0b3IgdG8gZmFjdG9yIGluIGNsYXNzDQpjbGFzcyhJbnN1cmFuY2UkR3JvdXApIDwtICJmYWN0b3IiDQpjbGFzcyhJbnN1cmFuY2UkQWdlKSA8LSAiZmFjdG9yIg0KDQppbnN1cmFuY2UuaDJvPC1hcy5oMm8oSW5zdXJhbmNlKQ0KbW9kZWwucG9pc3NvbjwtaDJvLmdsbSh5PSJDbGFpbXMiLCB4PWMoIkRpc3RyaWN0IiwgIkdyb3VwIiwiQWdlIiksIHRyYWluaW5nX2ZyYW1lID0gaW5zdXJhbmNlLmgybyxmYW1pbHk9InBvaXNzb24iLCBsYW1iZGE9MCxjb21wdXRlX3BfdmFsdWVzID0gVCApDQptb2RlbC5wb2lzc29uDQoNCiN3aXRob3V0IFAgdmFsdWUNCm1vZGVsLnBvaXNzb248LWgyby5nbG0oeT0iQ2xhaW1zIiwgeD1jKCJEaXN0cmljdCIsICJHcm91cCIsIkFnZSIpLCB0cmFpbmluZ19mcmFtZSA9IGluc3VyYW5jZS5oMm8sZmFtaWx5PSJwb2lzc29uIiApDQptb2RlbC5wb2lzc29uDQpgYGANCg0KI2dhbW1hIG1vZGVsDQpgYGB7cn0NCmdhbW1hLmludmVyc2UgPC0gaDJvLmdsbSh5ID0gIkRQUk9TIiwgeCA9IGMoIkFHRSIsIlJBQ0UiLCJDQVBTVUxFIiwiRENBUFMiLCJQU0EiLCJWT0wiKSwgdHJhaW5pbmdfZnJhbWUgPSBoMm8uZGYsIGZhbWlseSA9ICJnYW1tYSIsIGxpbmsgPSAiaW52ZXJzZSINCikNCmdhbW1hLmludmVyc2UNCmdhbW1hLmxvZyA8LSBoMm8uZ2xtKHk9IkRQUk9TIiwgeCA9IGMoIkFHRSIsIlJBQ0UiLCJDQVBTVUxFIiwiRENBUFMiLCJQU0EiLCJWT0wiKSwgdHJhaW5pbmdfZnJhbWUgPQ0KaDJvLmRmLCBmYW1pbHkgPSAiZ2FtbWEiLCBsaW5rID0gImxvZyIpDQpnYW1tYS5pbnZlcnNlDQpgYGANCg0KI3R3ZWVkaWUgbW9kZWwNCmBgYHtyfQ0KbGlicmFyeShIRHR3ZWVkaWUpDQpkYXRhKGF1dG8pDQpkaW0oYXV0byR4KQ0KaGlzdChhdXRvJHkpDQoNCmF1dG8uaDJvPC1hcy5oMm8oYXV0bykNCnZhcnM9cGFzdGUoInguIiwgY29sbmFtZXMoYXV0byR4KSwgc2VwPSIiKQ0KdmFycw0KbW9kZWwudHdlZWRpZT1oMm8uZ2xtKHk9InkiLCB4PXZhcnMsIHRyYWluaW5nX2ZyYW1lID0gYXV0by5oMm8sIGZhbWlseT0idHdlZWRpZSIpDQptb2RlbC50d2VlZGllDQpgYGANCg0KI3BhcmFtZXRlciBhZGp1c3QgaW4gYmlub21pYWwgbW9kZWwNCmBgYHtyfQ0KIyBhaXJsaW5lLmgybzwtaDJvLmltcG9ydEZpbGUoImh0dHA6Ly9zMy5hbWF6b25hd3MuY29tL2gyby1wdWJsaWMtdGVzdC1kYXRhL3NtYWxsbGRhdGEvYWlybGluZXMvYWxseWVhcnMya19oZWFkZXJzLnppcCIpDQoNCmFpcmxpbmVzPC1mcmVhZCgiQzpcXFVzZXJzXFxyNjMxNzU4XFxEZXNrdG9wXFxyNjMxNzU4XFxSIGNvZGVzXFxIMk9cXGV4ZXJjaXNlXFxhbGx5ZWFyczJrX2hlYWRlcnMuY3N2IikNCg0KYWlybGluZXMkSXNEZXBEZWxheWVkPC1hcy5mYWN0b3IoYWlybGluZXMkSXNEZXBEZWxheWVkKQ0KYWlybGluZXMkT3JpZ2luPC1hcy5mYWN0b3IoYWlybGluZXMkT3JpZ2luKQ0KYWlybGluZS5oMm88LWFzLmgybyhhaXJsaW5lcykNCiNzdG9wcyB0aGUgbW9kZWwgd2VobiB3ZSByZWFjaCAxMCBhY3RpdmUgcHJlZGljdG9ycw0KbW9kZWwuYmluPC1oMm8uZ2xtKHk9IklzRGVwRGVsYXllZCIsIHg9YygiWWVhciIsICJPcmlnaW4iKSwgdHJhaW5pbmdfZnJhbWU9YWlybGluZS5oMm8sZmFtaWx5PSJiaW5vbWlhbCIsIGxhbWJkYV9zZWFyY2g9VFJVRSwgbWF4X2FjdGl2ZV9wcmVkaWN0b3JzID0gMTAgKQ0KcHJpbnQobW9kZWwuYmluKQ0KDQpgYGANCg0KI2V4YW1wbGUgdG8gcmVtb3ZlIGNvbGxpbmVhciB2YXJpYWJsZXMNCmBgYHtyfQ0KYT1ydW5pZigxMDApDQpiPTIqYQ0KYz0tMyphKzEwDQpkZj1kYXRhLmZyYW1lKGEsYixjKQ0KZGYuaDJvPC1hcy5oMm8oZGYpDQpoMm8uZml0PWgyby5nbG0oeT0iYyIsIHg9YygiYSIsImIiKSwgdHJhaW5pbmdfZnJhbWUgPSBkZi5oMm8sIGxhbWJkYT0wLHJlbW92ZV9jb2xsaW5lYXJfY29sdW1ucyA9IFRSVUUpDQpoMm8uZml0DQoNCiNzaG93IFAgdmFsdWUNCmgyby5maXQ9aDJvLmdsbSh5PSJjIiwgeD1jKCJhIiwiYiIpLCB0cmFpbmluZ19mcmFtZSA9IGRmLmgybywgbGFtYmRhPTAscmVtb3ZlX2NvbGxpbmVhcl9jb2x1bW5zID0gVFJVRSwgY29tcHV0ZV9wX3ZhbHVlcyA9IFRSVUUpDQpoMm8uZml0DQpgYGANCiNDUk9TUyBWQUxJREFUSU9ODQpgYGB7cn0NCnBhdGg9c3lzdGVtLmZpbGUoImV4dGRhdGEiLCJwcm9zdGF0ZS5jc3YiLCBwYWNrYWdlPSJoMm8iKQ0KaDJvLmRmPC1oMm8uaW1wb3J0RmlsZShwYXRoKQ0KZGYuUjwtYXMuZGF0YS5mcmFtZShoMm8uZGYpDQppcy5mYWN0b3IoaDJvLmRmJENBUFNVTEUpDQpoMm8uZGYkQ0FQU1VMRTwtYXMuZmFjdG9yKGgyby5kZiRDQVBTVUxFKQ0KYmlub21pYWwuZml0PC1oMm8uZ2xtKHkgPSAiQ0FQU1VMRSIsIHggPSBjKCJBR0UiLCAiUkFDRSIsICJQU0EiLCAiR0xFQVNPTiIpLCB0cmFpbmluZ19mcmFtZSA9IGgyby5kZiwgZmFtaWx5ID0gImJpbm9taWFsIiwgbmZvbGRzID0gNSkNCmJpbm9taWFsLmZpdA0KYGBgDQoNCiNzZWUgb25lIG1vcmUgbG9naXN0aWMgcmVncmVzc2lvbg0KYGBge3J9DQpwYXRoID0gc3lzdGVtLmZpbGUoImV4dGRhdGEiLCAicHJvc3RhdGUuY3N2IiwgcGFja2FnZT0gImgybyIpDQogaDJvX2RmID0gaDJvLmltcG9ydEZpbGUocGF0aCkNCiBoMm9fZGYkQ0FQU1VMRSA9IGFzLmZhY3RvcihoMm9fZGYkQ0FQU1VMRSkNCiByYW5kX3ZlYyA8LSBoMm8ucnVuaWYoaDJvX2RmLCBzZWVkID0gMTIzNCkNCiB0cmFpbiA8LSBoMm9fZGZbcmFuZF92ZWMgPD0gMC44LF0NCiB2YWxpZCA8LSBoMm9fZGZbcmFuZF92ZWMgPiAwLjgsXQ0KIGJpbm9taWFsLmZpdCA9IGgyby5nbG0oeSA9ICJDQVBTVUxFIiwgeCA9IGMoIkFHRSIsICJSQUNFIiwgIlBTQSIsICJHTEVBU09OIiksIHRyYWluaW5nX2ZyYW1lID0gdHJhaW4sdmFsaWRhdGlvbl9mcmFtZSA9IHZhbGlkLCBmYW1pbHkgPSJiaW5vbWlhbCIpDQogcHJpbnQoYmlub21pYWwuZml0KQ0KYGBgDQoNCiNDb2VmZmljaWVudHMNCmBgYHtyfQ0KIGJpbm9taWFsLmZpdEBtb2RlbCRjb2VmZmljaWVudHMNCiBiaW5vbWlhbC5maXRAbW9kZWwkY29lZmZpY2llbnRzX3RhYmxlDQogaDJvLmNvbmZ1c2lvbk1hdHJpeChiaW5vbWlhbC5maXQsIHZhbGlkID0gRkFMU0UpDQpgYGANCg0KI3ByZWRpY3QgZnVuY3Rpb24NCmBgYHtyfQ0KdmFsaWQ8LWgyb19kZlsocmFuZF92ZWM+MC44KSYgKHJhbmRfdmVjPD0wLjkpLF0NCnRlc3Q8LWgyb19kZltyYW5kX3ZlYz4wLjksXQ0KYmlub21pYWwuZml0ID0gaDJvLmdsbSh5ID0gIkNBUFNVTEUiLCB4ID0gYygiQUdFIiwgIlJBQ0UiLCAiUFNBIiwgIkdMRUFTT04iKSwgdHJhaW5pbmdfZnJhbWUgPSB0cmFpbix2YWxpZGF0aW9uX2ZyYW1lID0gdmFsaWQsIGZhbWlseSA9ICJiaW5vbWlhbCIpDQpwcmludChiaW5vbWlhbC5maXQpDQojbWFrZSBhbmQgZXhwb3J0IHByZWRpY3Rpb25zDQpwcmVkPWgyby5wcmVkaWN0KGJpbm9taWFsLmZpdCwgdGVzdCkNCnRlc3QuUjwtYXMuZGF0YS5mcmFtZSh0ZXN0KQ0KcHJlZA0KcHJlZC5SPC1hcy5kYXRhLmZyYW1lKHByZWQpDQojIGgyby5leHBvcnRGaWxlKHByZWQsICJDOlxcVXNlcnNcXHI2MzE3NThcXERlc2t0b3BcXHI2MzE3NThcXFIgY29kZXNcXEgyT1xcZXhlcmNpc2VcXHByZWQuY3N2IikNCiNjYWxjdWxhdGUgbWV0cmljcw0KcHJlZj1oMm8ucGVyZm9ybWFuY2UoYmlub21pYWwuZml0LHRlc3QpDQpwcmVmDQpgYGANCg0KI3dob2xlIGV4YW1wbGUNCmBgYHtyfQ0KYWlybGluZXMuaDJvPC1oMm8uaW1wb3J0RmlsZSgiaHR0cDovL3MzLmFtYXpvbmF3cy5jb20vaDJvLXB1YmxpYy10ZXN0LWRhdGEvc21hbGxkYXRhL2FpcmxpbmVzL2FsbHllYXJzMmtfaGVhZGVycy56aXAiKQ0KbW9kZWwgPSBoMm8uZ2xtKHkgPSAiSXNEZXBEZWxheWVkIiwgeCA9IGMoIlllYXIiLCJPcmlnaW4iKSwgdHJhaW5pbmdfZnJhbWUgPSBhaXJsaW5lcy5oMm8sZmFtaWx5ID0gImJpbm9taWFsIiwgbmZvbGRzID0gNSkNCnByaW50KHBhc3RlKCJmdWxsIG1vZGVsIHRyYWluaW5nIGF1YzoiLG1vZGVsQG1vZGVsJHRyYWluaW5nX21ldHJpY3NAbWV0cmljcyRBVUMpKQ0KcHJpbnQocGFzdGUoImZ1bGwgbW9kZWwgY3YgYXVjOiIsIG1vZGVsQG1vZGVsJGNyb3NzX3ZhbGlkYXRpb25fbWV0cmljc0BtZXRyaWNzJEFVQykpDQoNCmZvciAoIGkgaW4gMTo1KXsNCiAgY3ZfbW9kZWxfbmFtZT1tb2RlbEBtb2RlbCRjcm9zc192YWxpZGF0aW9uX21vZGVsc1tbaV1dJG5hbWUNCiAgY3ZfbW9kZWw9aDJvLmdldE1vZGVsKGN2X21vZGVsX25hbWUpDQogIHByaW50IChwYXN0ZSAoImN2IGZvbGQiLCBpLCAidHJhaW5pbmcgYXVjOiIsIGN2X21vZGVsQG1vZGVsJHRyYWluaW5nX21ldHJpY3NAbWV0cmljcyRBVUMsICJ2YWxpZGF0aW9uIGF1YzogIiwgY3ZfbW9kZWxAbW9kZWwkdmFsaWRhdGlvbl9tZXRyaWNzQG1ldHJpY3MkQVVDKSkNCn0NCmBgYA0KDQo=