MCPcopy Index your code
hub / github.com/WinVector/Logistic / LevelIndicators

Class LevelIndicators

src/com/winvector/variables/LevelIndicators.java:19–118  ·  view source on GitHub ↗

The standard way to encode a categorical variable- build one indicator function per value (we don't supress one level). @author johnmount

Source from the content-addressed store, hash-verified

17 *
18 */
19public final class LevelIndicators implements VariableMapping {
20 private static final long serialVersionUID = 1L;
21
22 private final String origColumn;
23 private final int index;
24 private final Map<String,Integer> levelCodes = new HashMap<String,Integer>();
25
26 public LevelIndicators(final String origColumn, final int index, final Collection<String> levels) {
27 this.origColumn = origColumn;
28 this.index = index;
29 for(final String li: new TreeSet<String>(levels)) {
30 levelCodes.put(li,levelCodes.size());
31 }
32 }
33
34 public Set<String> levels() {
35 return levelCodes.keySet();
36 }
37
38 public int index(final String level) {
39 return index + levelCodes.get(level);
40 }
41
42 @Override
43 public String origColumn() {
44 return origColumn;
45 }
46
47 @Override
48 public int indexL() {
49 return index;
50 }
51
52 @Override
53 public int indexR() {
54 return index + levelCodes.size();
55 }
56
57 @Override
58 public boolean wantRegularization() {
59 return false;
60 }
61
62 @Override
63 public void process(final BurstMap row, final double[] vec) {
64 final String level = row.getAsString(origColumn);
65 if(level!=null) {
66 final Integer code = levelCodes.get(level);
67 if(code!=null) {
68 vec[index+code] = 1.0;
69 }
70 }
71 }
72
73 @Override
74 public String name() {
75 return "CategoricalLevels";
76 }

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected