Я пытаюсь разработать хранимую процедуру, которая делает предсказание машинного языка.
Вот что я сделал до сих пор:
DROP PROCEDURE IF EXISTS get_prediction_xgb_classify;
GO
CREATE PROCEDURE get_prediction_xgb_classify (@my_text varchar(100))
AS
BEGIN
DECLARE @my_script nvarchar(4000)
SET @my_script = '
import numpy as np
from sklearn.externals import joblib
predictors = "" + "' + @my_text + '"
fields = predictors.strip().split(",")
n_fields = len(fields)
clf = joblib.load("C:/sm/trained_models/xgb_classify.pkl")
print("clf:\n", clf)
row = np.array(predictors.split(","),dtype=float).reshape(1,5)
print(" row: ", row)
predicted = clf.predict(row)[0]
#print(" predicted: ", predicted)
#probabilities = clf.predict_proba(row)[0]
#probability = probabilities[predicted]
#print("predicted: ", predicted, ", probabilities: ", probabilities, ", probability: ", probability)
'
EXEC sp_execute_external_script @language = N'Python',
@script = @my_script
END
GO
EXEC get_prediction_xgb_classify "0.215, -0.499, 1.654, 4.25, 1.559"
GO
Этот код вылетает в строке:
predicted = clf.predict(row)[0]
с сообщением: Неверный поток BXL
Если я закомментирую строку прогноза, я получу:
STDOUT message(s) from external script:
clf:
XGBClassifier(base_score=0.5, booster='gbtree', colsample_bylevel=1,
colsample_bytree=1, gamma=0, learning_rate=0.1, max_delta_step=1,
max_depth=19, min_child_weight=1.0, missing=nan, n_estimators=1000,
n_jobs=1, nthread=None, objective='binary:logistic', random_state=7,
reg_alpha=0, reg_lambda=1, scale_pos_weight=16.524663677130047,
seed=None, silent=True, subsample=0.844367185738714)
row: [[ 0.215 -0.499 1.654 4.25 1.559]]
Я также поместил этот код в Visual Studio 2017 и откомментировал все операторы печати. Это бежало ок. и дал хорошие результаты.
Любые предложения будут с благодарностью.
Charles