[英]Predict multiple values as model result in scikit learn
我已經使用scikit學習算法創建了一個模型。
rf = RandomForestClassifier(n_estimators = 10,random_state=seed)
rf.fit(X_train,Y_train)
shift_id=2099.0
user_id=1402.0
status=['S']
shift_organisation_id=15.0
shift_department_id=20.0
open_positions=71.0
city=['taunton']
role_id=3.0
specialty_id=16.0
years_of_experience=10.0
nurse_zip=2780.0
shifts_zip=2021.0
status = status_encoder.transform(status)
city = city_encoder.transform(city)
X = np.array([shift_id, user_id, status, shift_organisation_id, shift_department_id, open_positions, city, role_id, specialty_id, years_of_experience, nurse_zip, shifts_zip])
location_id = rf.predict(X.reshape(1,-1))
print(location_id)
得到這樣的結果
[25]
我了解到25
是此模型的最佳預測值。 但我想獲得最高的最佳3個值。 我怎么才能得到它?
在這種情況下,預測結果將是
[23,45,25]
您可以將predict_proba
方法返回類的概率,並從中獲得前3名的值裁判
rf = RandomForestClassifier(n_estimators = 10,random_state=seed)
rf.fit(X_train,Y_train)
shift_id=2099.0
user_id=1402.0
status=['S']
shift_organisation_id=15.0
shift_department_id=20.0
open_positions=71.0
city=['taunton']
role_id=3.0
specialty_id=16.0
years_of_experience=10.0
nurse_zip=2780.0
shifts_zip=2021.0
status = status_encoder.transform(status)
city = city_encoder.transform(city)
X = np.array([shift_id, user_id, status, shift_organisation_id, shift_department_id, open_positions, city, role_id, specialty_id, years_of_experience, nurse_zip, shifts_zip])
location_id = rf.predict_proba(X.reshape(1,-1))
print(location_id)
為此,您具有predict_proba
方法,該方法返回類概率的預測。
讓我們使用虹膜數據集檢查示例:
from sklearn import datasets
iris = datasets.load_iris()
X = iris.data[:, :2] # we only take the first two features.
y = iris.target
# train/test split
X_train, X_test, y_train, y_test = train_test_split(X, y)
rf = RandomForestClassifier(n_estimators = 10, random_state=10)
rf.fit(x_train,y_train)
如果您現在按預期方式調用predict
方法,則將獲得最高的概率類別:
rf.predict(X_test)
# array([1, 2, 1, 0, 2, 0, 2, 0, 0, 1, 2, ...
但是,調用predict_proba
會得到相應的概率:
rf.predict_proba(X_test)
array([[0. , 1. , 0. ],
[0.11 , 0.1 , 0.79 ],
[0. , 0.7 , 0.3 ],
[0.5 , 0.4 , 0.1 ],
[0. , 0.3 , 0.7 ],
[0.5 , 0.2 , 0.3 ],
[0.4 , 0. , 0.6 ],
...
為了獲得最高的k
概率,您可以使用argsort
並索引相應的概率rf.classes_
:
k = 2
rf.classes_[rf.predict_proba(X_test).argsort()[:,-k:]]
array([[2, 1],
[0, 2],
[2, 1],
[1, 0],
[1, 2],
[2, 0],
[0, 2],
[1, 0],
[1, 0],
[2, 1],
...
在上面可以使用argpartition
作為僅對前k
概率感興趣的方法進行改進:
rf.classes_[rf.predict_proba(X_test).argpartition(range(k))[:,-k:]]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.