blob: 7bc938eeddd8e7dcc31896aa4c11941783aafe0d [file]
#-------------------------------------------------------------
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
#-------------------------------------------------------------
# function Weight of evidence / information gain
#
# INPUT:
# --------------------------------------------------
# X ---
# Y ---
# mask ---
# --------------------------------------------------
#
# OUTPUT:
# ------------------------------------------------
# F Weighted X matrix where the entropy mask is applied
# entropyMatrix A entropy matrix to apply to data
# ------------------------------------------------
m_WoE = function(Matrix[Double] X, Matrix[Double] Y, Matrix[Double] mask)
return (Matrix[Double] F, Matrix[Double] entropyMatrix) {
tempX = replace(target=X, pattern=NaN, replacement=1)
entropyMatrix = matrix(0, rows=ncol(tempX), cols = max((tempX*mask)))
if(sum(mask) > 0)
{
for(i in 1:ncol(mask))
{
if(as.scalar(mask[1, i]) == 1)
{
L = tempX[, i]
entropy = getEntropy(L, Y)
entropyMatrix[i, 1:ncol(entropy)] = entropy
}
}
}
F = WoEApply(X, Y, entropyMatrix)
}
getEntropy = function(Matrix[Double] eX, Matrix[Double] eY)
return(Matrix[Double] entropyMatrix)
{
tab = table(eX, eY)
# print("tab \n"+toString(tab))
entropyMatrix = matrix(0, rows=1, cols=nrow(tab))
catTotal = rowSums(tab)
for(i in 1:nrow(tab))
{
# print("catProb: " +catProb)
entropy = (tab[i,]/catTotal[i])
catEntropy = sum(-entropy * log(entropy, 2))
catEntropy = ifelse(is.na(catEntropy), 0, catEntropy)
# print("cat entropy: "+catEntropy)
entropyMatrix[1, i] = catEntropy
}
}