[英]Why can't I predict new data using SVM and KNN?
我是機器學習的新手,我剛剛通過sklearn學習了KNN和SVM。 如何使用SVM或KNN預測新數據? 我都試圖做出預測。 僅當數據已知時,它們才能做出良好的預測。 但是,當我嘗試預測新數據時,它們給出了錯誤的預測。
這是我的代碼:
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
只要要預測的數據在x_train范圍內,此代碼即可做出良好的預測。 但是,當我嘗試預測例如20或范圍x_train以上的任何值時,輸出將始終為12,這是y的最后一個元素。 我不知道我在代碼中做錯了什么。
該代碼的行為如支持向量機所描述的那樣。
您必須了解算法如何解釋您的數據。 您有11個數據點,並且給每個數據點一個不同的類 。 SVM最終將數字行基本上分為11個部分(對於您定義的11個類 ):
data = [(x, clf.predict([[x]])[0]) for x in np.linspace(1, 20, 300)] plt.scatter([p[0] for p in data], [p[1] for p in data]) plt.show()
AILearning的答案告訴您如何解決給定的玩具問題,但請確保您還了解為什么您的代碼沒有按照您的預期做。 對於任何有限的示例集,都有無數個適合數據的函數。 您的根本問題是混淆了回歸和分類。 從它的聲音來看,您希望一個簡單的回歸模型從數據點外推擬合函數,但是您的代碼用於分類模型。
您必須使用回歸模型而不是分類模型。 對於基於svm的回歸,請使用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))
輸出:
[50.12]
0.9996
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.