Merging feature sets
vme64
New Altair Community Member
Hello!
I developed a process that consists of the following steps:
1) Read dataset
2) Split in test and training set
3) Do a feature selection in the training set using SVM, Foward selection, X-Val and OptimizeParameters
4) Build a model using the selected parameters
4) Apply the resulting model (that is, the one generated with the best features) to the test set
The problem is that SVM classifiers expect that the test set has exactly the same features that were used to build the model, otherwise the results are screwed up. But I did not manage to filter out the features of the test set that were not among the selected ones.
Stating more concisely, given two different datasets A and B, where the features of B consists of a subset of the features of A, I need a dataset C that consist of the data contained in A but comprising only the features shared with B:
Dataset A
Dataset B
Dataset C
I am doing things this way (instead of using only X-Val) so as to guarantee that my test set is not used at all during the modelling process.
If somebody has some clue of how doing this (or if I should do it another way) I will thank a lot!
Best regards,
Vinicius
I developed a process that consists of the following steps:
1) Read dataset
2) Split in test and training set
3) Do a feature selection in the training set using SVM, Foward selection, X-Val and OptimizeParameters
4) Build a model using the selected parameters
4) Apply the resulting model (that is, the one generated with the best features) to the test set
The problem is that SVM classifiers expect that the test set has exactly the same features that were used to build the model, otherwise the results are screwed up. But I did not manage to filter out the features of the test set that were not among the selected ones.
Stating more concisely, given two different datasets A and B, where the features of B consists of a subset of the features of A, I need a dataset C that consist of the data contained in A but comprising only the features shared with B:
Dataset A
ID | Feature 1 | Feature 2 | Feature 3 |
1 | 3 | 9 | 2 |
2 | 5 | 3 | 1 |
ID | Feature 1 | Feature 3 |
35 | 1 | 0 |
41 | 2 | 9 |
29 | 2 | 9 |
ID | Feature 1 | Feature 3 |
1 | 3 | 2 |
2 | 5 | 1 |
If somebody has some clue of how doing this (or if I should do it another way) I will thank a lot!
Best regards,
Vinicius
Tagged:
0
Answers
-
Hello
You could try the "Data to weights" and "Select by weights" operators. See the enclosed.
regards
Andrew<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<process version="5.1.006">
<context>
<input/>
<output/>
<macros/>
</context>
<operator activated="true" class="process" compatibility="5.1.006" expanded="true" name="Process">
<process expanded="true" height="431" width="614">
<operator activated="true" class="generate_data" compatibility="5.1.006" expanded="true" height="60" name="Generate Data" width="90" x="112" y="30">
<parameter key="number_of_attributes" value="50"/>
</operator>
<operator activated="true" class="generate_data" compatibility="5.1.006" expanded="true" height="60" name="Generate Data (2)" width="90" x="112" y="120">
<parameter key="number_of_attributes" value="3"/>
</operator>
<operator activated="true" class="select_attributes" compatibility="5.1.006" expanded="true" height="76" name="Select Attributes" width="90" x="112" y="210">
<parameter key="attribute_filter_type" value="subset"/>
<parameter key="attributes" value="|att3|att1"/>
</operator>
<operator activated="true" class="data_to_weights" compatibility="5.1.006" expanded="true" height="76" name="Data to Weights" width="90" x="246" y="210"/>
<operator activated="true" class="select_by_weights" compatibility="5.1.006" expanded="true" height="94" name="Select by Weights" width="90" x="447" y="30"/>
<connect from_op="Generate Data" from_port="output" to_op="Select by Weights" to_port="example set input"/>
<connect from_op="Generate Data (2)" from_port="output" to_op="Select Attributes" to_port="example set input"/>
<connect from_op="Select Attributes" from_port="example set output" to_op="Data to Weights" to_port="example set"/>
<connect from_op="Data to Weights" from_port="weights" to_op="Select by Weights" to_port="weights"/>
<connect from_op="Select by Weights" from_port="example set output" to_port="result 1"/>
<portSpacing port="source_input 1" spacing="0"/>
<portSpacing port="sink_result 1" spacing="0"/>
<portSpacing port="sink_result 2" spacing="0"/>
</process>
</operator>
</process>0 -
Hello,
Thanks a lot for the answer and for the example! It worked and now I could complete my process.
Best regards,
Vinicius0