Использовать обученную гауссовскую наивную байесовскую модель в python в Sql Server - PullRequest
0 голосов
/ 13 ноября 2018

Я использую приведенный ниже код для обучающей модели и сохраняю его в таблице как varbinary (max)

Как я могу использовать его с новыми предстоящими данными?

exec sp_execute_external_script

@language = N'Python'

,@script=
N'
import pandas as pd
import matplotlib.pyplot as plt
import pickle
from sklearn.cross_validation import train_test_split
from sklearn.preprocessing import Imputer
from sklearn.naive_bayes import GaussianNB
 from sklearn import metrics

df = InputDataSet

feature_col_names = [''num_preg'', ''glucose_conc'', ''diastolic_bp'', ''skin_thickness'', ''insulin'', ''bmi'', ''diab_pred'', ''age'']
predicted_class_names = [''diabetes'']

X = df[feature_col_names].values     # predictor feature columns (8 X m)
y = df[predicted_class_names].values # predicted class (1=true, 0=false) column (1 X m)
split_test_size = 0.30

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=split_test_size, random_state=42) 

nb_model = GaussianNB()
logitObj = nb_model.fit(X_train, y_train.ravel())
trained_model = pickle.dumps(logitObj)
'
,
@input_data_1 = N'SELECT [num_preg],[glucose_conc],[diastolic_bp],[skin_thickness],[insulin],[bmi],[diab_pred],[age],[diabetes] FROM [dbo].[dataset_1]',
@params = N'@trained_model varbinary(max) OUTPUT',
@trained_model = @trained_model OUTPUT;

INSERT INTO model_binary ([model])

Теперь я 'Я пытаюсь использовать мою модель и прогнозировать результат на новом наборе данных, но я получаю ошибку за ошибкой при изменении запроса.

DECLARE @model1 varbinary(max) = (select top 1 model from model_binary);

EXEC sp_execute_external_script
  @language = N'Python',
  @script = N'
import pickle;
import numpy;
from sklearn import metrics

mod = pickle.loads(model1)
X = InputDataSet[["num_preg","glucose_conc","diastolic_bp","skin_thickness","insulin","bmi","diab_pred","age"]]
y = numpy.ravel(InputDataSet[["diabetes"]])

probArray = mod.predict_proba(X)
probList = []
for i in range(len(probArray)):
  probList.append((probArray[i])[1])

probArray = numpy.asarray(probList)
fpr, tpr, thresholds = metrics.roc_curve(y, probArray)
aucResult = metrics.auc(fpr, tpr)
print ("AUC on testing data is: " + str(aucResult))

OutputDataSet = pandas.DataFrame(data = probList, columns = ["predictions"])
',  
  @input_data_1 = N'SELECT [num_preg],[glucose_conc],[diastolic_bp],[skin_thickness],[insulin],[bmi],[diab_pred],[age] FROM [dbo].[dataset_1_to_predict]',
  @input_data_1_name = N'InputDataSet',
  @params = N'@model1 varbinary(max)',
  @model1 = @model1
WITH RESULT SETS ((Score float));

Не могли бы вы сообщить, если существует простое решение для этого или мое понимание неверно?

...