def classify(self, texts):
vectors = self.dictionary.feature_vectors(texts)
predictions = self.svm.decision_function(vectors)
predictions = np.transpose(predictions)[0]
predictions = predictions / 2 + 0.5
predictions[predictions > 1] = 1
predictions[predictions < 0] = 0
return predictions
The error:
TypeError: 'numpy.float64' object does not support item assignment
occurs on the following line:
predictions[predictions > 1] = 1
Does anyone has an idea of solving this problem? Thanks!
You can't perform this operation in all elements at once,
predictions = predictions / 2 + 0.5
If you want to update all the elements contained by 'predictions', rather do the following
What are you doing here ???????????
predictions[predictions > 1] = 1
I am not sure of what you are trying to do , but if you are trying to compare if elements at each index of 'predictions' is greater than 1, rather put the statements under the above if statement as follows
Try this testing code and pay attention to
np.array([1,2,3], dtype=np.float64)
. It seems self.svm.decision_function(vectors) returns 1d array instead of 2d. If you replace [1,2,3] to [[1,2,3], [4,5,6]] everything will be ok.Output:
So, what your vectors are?
there is no element in array is bigger than 1,So you cannot assign 1 to predictions[predictions>1],you can use ' predictions>1 ' before your assignment.
is a boolean operation.
evaluates to
You are looking for the np.where() operator. Your code should look like this: