簡體   English   中英

為什么我不能使用SVM和KNN預測新數據?

[英]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()

SVM類

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM