I am working on a match analytics project where I have to deal with the situation in which I am having some inputs like skills, experience, certifications etc. and my output is candidate selected Yes or No, my problem is, Is there any algorithm which will allow users to give weightage to one Input than the others? For example skills matters more for someone whereas for other user experience matters . I have tried neural network and Naive bayes algorithm but unable to choose importance of variable . Any help will be highly appreciable.
3 Answers
The answer is that you don't need to . Say you decide to go with some classification model, for instance a simple decision tree, the model in question will implicitly learn which are the importances (or weights) of the features of your training data, and will use these features as main nodes of the tree.
To better understand this idea, lets take as an example the ID3 algorithm, which is one of the several existing algorithms to generate decision trees from a dataset. This algorithm will build a tree by iteratively setting as decision nodes those features that maximise the information gain at each step, or in other words, those that are the best predictors.
So it will implicitly be giving more importance to the attributes that are better predictors, hence there is no need to assign weights to the features of the dataset.
So my suggestion is that you try using some classifier from scikit-learn such as RandomForestClassifier for instance.
-
$\begingroup$ Can you suggest then any alternative algorithm or simple mathematical function I should use $\endgroup$ Commented Feb 21, 2019 at 11:52
-
$\begingroup$ Yes updated with an example. Have a look at the classifiers in scikit learn $\endgroup$– yatuCommented Feb 21, 2019 at 11:56
You should avoid competing with any algorithm for feature importance but for now let us see the other side of the coin. Here I am thinking for the user. Maybe it is a good idea to give the user the power to select people base on certain criteria so giving weights for certain features make sense.
Rpart has this option (the parameter cost which ranges from 0 to 1).
It might also be good idea if users can ignore other variables so you will make a model for each subsets of all features.
Since you mention the neural networks ...
Input weights in neural networks
Giving more weight to some inputs in a neural network could be easily done by multiplying the input with some weights you predefine.
Example in TF: (assuming inputs are arrays of numbers of size 3):
input = tf.placeholder(tf.float32, shape=(1, 3))
weights = tf.constant([2, 1, 3], dtype=tf.float32) # weights for input
weighted_input = tf.multiply(input, weights)
... rest ot the network ...
But, as others already mentioned, you should be careful with playing with weighted inputs in machine learning algorithms, in this case neural network, since those things should be learned by the model.