Search code examples
pythonmachine-learningscikit-learnsvmknn

Why can't I predict new data using SVM and KNN?


I'm new to machine learning and I just learned KNN and SVM with sklearn. How do I make a prediction for new data using SVM or KNN? I have tried both to make prediction. They make good prediction only when the data is already known. But when I try to predict new data, they give an incorrect prediction.

Here is my code:

import numpy as np
from sklearn import svm

x=np.array([[1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11]], dtype=np.float64)
y=np.array([2,3,4,5,6,7,8,9,10,11,12], dtype=np.float64)

clf = svm.SVC(kernel='linear')
clf.fit(x, y)
print(clf.predict([[20]]))
print(clf.score(x, y))

0utput:

[12.]
1.0

This code will make a good prediction as long as the data to predict is within the range x_train. But when I try to predict for example 20, or anything above the range x_train, the output will always be 12 which is the last element of y. I don't know what I do wrong in the code.


Solution

  • You have to use a regression model rather than a classification model. For svm based regression use svm.SVR()

    import numpy as np
    from sklearn import svm
    
    x=np.array([[1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11]], dtype=np.float64)
    y=np.array([2,3,4,5,6,7,8,9,10,11,12], dtype=np.float64)
    
    clf = svm.SVR(kernel='linear')
    clf.fit(x, y)
    print(clf.predict([[50]]))
    print(clf.score(x, y))
    

    output:

    [50.12]
    0.9996