/src/main/java/org/encog/app/analyst/script/normalize/AnalystNormalize.java
Java | 189 lines | 105 code | 21 blank | 63 comment | 29 complexity | ba893bd96a22bc8a19245b09a8dafc1d MD5 | raw file
- /*
- * Encog(tm) Core v3.4 - Java Version
- * http://www.heatonresearch.com/encog/
- * https://github.com/encog/encog-java-core
-
- * Copyright 2008-2017 Heaton Research, Inc.
- *
- * Licensed 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.
- *
- * For more information on Heaton Research copyrights, licenses
- * and trademarks visit:
- * http://www.heatonresearch.com/copyright
- */
- package org.encog.app.analyst.script.normalize;
- import java.util.ArrayList;
- import java.util.List;
- import org.encog.app.analyst.AnalystError;
- import org.encog.app.analyst.missing.DiscardMissing;
- import org.encog.app.analyst.missing.HandleMissingValues;
- import org.encog.app.analyst.missing.MeanAndModeMissing;
- import org.encog.app.analyst.missing.NegateMissing;
- import org.encog.app.analyst.script.AnalystClassItem;
- import org.encog.app.analyst.script.AnalystScript;
- import org.encog.app.analyst.script.DataField;
- import org.encog.app.analyst.script.prop.ScriptProperties;
- import org.encog.util.arrayutil.ClassItem;
- import org.encog.util.arrayutil.NormalizationAction;
- /**
- * This class holds information about the fields that the Encog Analyst will
- * normalize.
- *
- */
- public class AnalystNormalize {
- /**
- * The normalized fields. These fields define the order and format
- * that data will be presented to the ML method.
- */
- private final List<AnalystField> normalizedFields
- = new ArrayList<AnalystField>();
-
- /**
- * The parent script.
- */
- private AnalystScript script;
- /**
- * Construct the object.
- * @param theScript The script.
- */
- public AnalystNormalize(AnalystScript theScript) {
- this.script = theScript;
- }
-
- /**
- * @return Calculate the input columns.
- */
- public int calculateInputColumns() {
- int result = 0;
- for (final AnalystField field : this.normalizedFields) {
- if (field.isInput()) {
- result += field.getColumnsNeeded();
- }
- }
- return result;
- }
- /**
- * Calculate the output columns.
- * @return The output columns.
- */
- public int calculateOutputColumns() {
- int result = 0;
- for (final AnalystField field : this.normalizedFields) {
- if (field.isOutput()) {
- result += field.getColumnsNeeded();
- }
- }
- return result;
- }
- /**
- * @return Count the active fields.
- */
- public int countActiveFields() {
- int result = 0;
- for (final AnalystField field : this.normalizedFields) {
- if (field.getAction() != NormalizationAction.Ignore) {
- result++;
- }
- }
- return result;
- }
- /**
- * @return the normalizedFields
- */
- public List<AnalystField> getNormalizedFields() {
- return this.normalizedFields;
- }
- /**
- * Init the normalized fields.
- * @param script The script.
- */
- public void init(final AnalystScript script) {
- if (this.normalizedFields == null) {
- return;
- }
- for (final AnalystField norm : this.normalizedFields) {
- final DataField f = script.findDataField(norm.getName());
- if (f == null) {
- throw new AnalystError("Normalize specifies unknown field: "
- + norm.getName());
- }
- if (norm.getAction() == NormalizationAction.Normalize) {
- norm.setActualHigh(f.getMax());
- norm.setActualLow(f.getMin());
- }
- if ((norm.getAction() == NormalizationAction.Equilateral)
- || (norm.getAction() == NormalizationAction.OneOf)
- || (norm.getAction() == NormalizationAction.SingleField)) {
- int index = 0;
- for (final AnalystClassItem item : f.getClassMembers()) {
- norm.getClasses().add(
- new ClassItem(item.getName(), index++));
- }
- }
- }
- }
- /** {@inheritDoc} */
- @Override
- public String toString() {
- final StringBuilder result = new StringBuilder("[");
- result.append(getClass().getSimpleName());
- result.append(": ");
- if (this.normalizedFields != null) {
- result.append(this.normalizedFields.toString());
- }
- result.append("]");
- return result.toString();
- }
- /**
- * @return the missingValues
- */
- public HandleMissingValues getMissingValues() {
- final String type = this.script.getProperties().getPropertyString(
- ScriptProperties.ML_CONFIG_TYPE);
- if( type.equals("DiscardMissing") ) {
- return new DiscardMissing();
- } else if( type.equals("MeanAndModeMissing") ) {
- return new MeanAndModeMissing();
- } else if( type.equals("NegateMissing") ) {
- return new NegateMissing();
- } else {
- return new DiscardMissing();
- }
- }
- /**
- * @param missingValues the missingValues to set
- */
- public void setMissingValues(HandleMissingValues missingValues) {
- this.script.getProperties().setProperty(
- ScriptProperties.NORMALIZE_MISSING_VALUES, missingValues.getClass().getSimpleName());
- }
- }