我在 sklearn-diabetes 數據集上實現了許多 ML 算法,除了 SVR 之外,所有這些算法在測試子集上的 R^2 約為 0.45。不過,當我進行 SVR 時,我在測試子集上得到的 R^2 分數為 0.16。我想知道這是否是因為 SVR 對于數據集來說是一個糟糕的算法選擇,或者是因為我錯誤地實現了它。我的程序如下:import pandas as pdimport numpy as npimport matplotlib as pltfrom sklearn import model_selectionfrom sklearn.linear_model import LinearRegressionfrom sklearn.linear_model import Ridgefrom sklearn.linear_model import RidgeCVfrom sklearn.linear_model import Lassofrom sklearn.linear_model import ElasticNetfrom sklearn.preprocessing import PolynomialFeaturesfrom sklearn.svm import SVRfrom sklearn.ensemble import RandomForestRegressorfrom sklearn.metrics import r2_scorefrom sklearn.model_selection import train_test_splitfrom sklearn.model_selection import GridSearchCVfrom sklearn.metrics import mean_squared_errorfrom math import sqrtfrom sklearn.datasets import load_diabetesdiabetes_data= load_diabetes()#print (diabetes_data.keys())data1 = pd.DataFrame(data= np.c_[diabetes_data['data'], diabetes_data['target']], columns= diabetes_data['feature_names'] + ['target'])predictors= data1.drop('target', axis=1).valuestarget_df= data1['target'].valuesX_train, X_test, y_train, y_test= train_test_split(predictors, target_df,test_size=0.30, random_state=42)svr_reg = SVR(kernel = "rbf")svr_reg.fit(X_train, y_train)svr_reg_train= svr_reg.predict(X_train)print("SVR Train RMSE: %.2f" % np.sqrt(mean_squared_error(y_train, svr_reg_train)))print("SVR Train R^2 Score: %.2f" % r2_score(y_train, svr_reg_train))svr_reg_test= svr_reg.predict(X_test)print("SVR Test RMSE: %.2f" % np.sqrt(mean_squared_error(y_test, svr_reg_test)))print("SVR Test R^2 Score: %.2f" % r2_score(y_test, svr_reg_test))
1 回答

慕村9548890
TA貢獻1884條經驗 獲得超4個贊
首先,內核的有效性取決于數據——這就是內置各種選項的原因。當一種選擇不起作用時,請隨意嘗試其他選擇。例如,
svr_reg = SVR(kernel="sigmoid")
提高test R^2
to 0.35
,這與您之前的結果更接近。
我相信該程序沒有出錯,因為樸素的線性回歸產生了test R^2 = 0.058
。因此,test R^2 = 0.16
徑向基函數(rbf)內核確實獲得了一些額外的精度。它只是碰巧不太適合數據特征。
添加回答
舉報
0/150
提交
取消