簡體   English   中英

將 SciPy 優化應用於擬合的 sci-kit 模型

[英]Applying SciPy optimization to a fitted sci-kit model

最近我遇到了一個問題,我認為 SciPy 可能是一個很好的解決方案。 但是,我無法正確應用它。 不確定我是否遺漏了什么,或者我正在尋找的東西實際上根本不可能。

這是一個虛構的例子,我使事情更清晰,更容易形象化。 我的情況比較復雜。

from sklearn.model_selection import train_test_split 
from sklearn.svm import SVR
from scipy.optimize import minimize
import numpy as np
import pandas as pd

time_studied = [12, 10, 4, 7, 6, 11, 6]
hours_slept = [8, 7, 1, 3, 8, 6, 5]
grade = [10, 9, 2, 5, 7, 8, 8.5, 6]

X = np.array([time_studied, hours_slept]).T
y = np.array([grade]).T 
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)    
model = SVR(kernel='poly', C=100, gamma='auto', degree=3, epsilon=.1, coef0=1)
model.fit(X,y)

然后,我嘗試將優化器應用於該函數,以找到睡眠和學習之間的最佳平衡。 由於經過測試的回歸方法返回一個函數,所以我想可以應用 SciPy 最小化。 但是,當我嘗試應用它時,像這樣

bnds = [(0,12), (0,8)]
x0 = [0,0]
residual_plant = minimize(model, x0, method='SLSQP',bounds=bnds,options = {'eps': np.radians(5.0)})

我收到以下錯誤

TypeError: 'SVR' object is not callable

因此,顯然可以直接從我的模型中調用優化器。 因此,這是我的問題,如何訪問適合我的數據的函數並能夠找到最佳的睡眠時間 + 學習時間 x 等級(在這種情況下,預期結果很明顯)

我錯過了什么嗎? 有可能做我的目標嗎?

嘗試這個:

residual_plant = minimize(lambda x: model.predict(np.array([x])), x0, method='SLSQP',bounds=bnds,options = {'eps': np.radians(5.0)})

第一個參數SciPy的的minimize不僅僅是model.predict因為SciPy的嘗試一維數組傳遞給它的目標函數,但model.predict預計二維數組。

(順便說一下,在您的虛擬模型的訓練設置中, yX的第二列,並且從未使用列表grades 。我懷疑y應該是np.array([grades]).T 。從那以后不是您的真實模型,這可能並不重要。)

predict方法的參考文檔: https : //scikit-learn.org/stable/modules/generated/sklearn.svm.SVR.html?highlight=svr#sklearn.svm.SVR.predict

可以在此處找到predict方法的示例用法: https : //scikit-learn.org/stable/auto_examples/svm/plot_svm_regression.html#sphx-glr-auto-examples-svm-plot-svm-regression-py

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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