0

I'm having an issue from DsX Python notebook,

I've implemented a very simple linear regression (Single Polynomial), for one single predictor variable and a target variable.

The model works fine for predicting from python code in the notebook, but as soon as I deploy it on cloud to publish it through web services in my WML service, I make the post and the following happens:

print(diabetes_X_train.shape)

payload_scoring = {"values":diabetes_X_train.tolist()}

print(payload_scoring)

Output:

(422, 1) {'values': [[0.0616962065186885], [-0.0514740612388061], [0.0444512133365941], [-0.0115950145052127], [-0.0363846922044735], [-0.0406959404999971], [-0.0471628129432825], [-0.00189470584028465], [0.0616962065186885], [0.0390621529671896], [-0.0838084234552331], [0.0175059114895716], [-0.0288400076873072], [-0.00189470584028465], [-0.0256065714656645], [-0.0180618869484982], [0.0422955891888323], [0.0121168511201671], [-0.0105172024313319], [-0.0180618869484982], [-0.0568631216082106], [-0.0223731352440218], [-0.00405032998804645], [0.0606183944448076], [0.0358287167455469], [-0.0126728265790937], [-0.0773415510119477], [0.0595405823709267], [-0.0212953231701409], [-0.00620595413580824], [0.0444512133365941], [-0.0654856181992578], [0.125287118877662], [-0.0503962491649252], [-0.063329994051496], [-0.030995631835069], [0.0228949718589761], [0.0110390390462862], [0.0713965151836166], [0.0142724752679289], [-0.00836157828357004], [-0.0676412423470196],...

Next cell:

response_scoring = requests.post(scoring_url, json=payload_scoring, headers=header) print(response_scoring.text)

Output:

{"trace": "6nrs0HsEE1HerigSZ", "errors": [{"code": "invalid_input_data", "message": "Expected 2D array, got 1D array instead:\narray=[ 0.06169621 -0.05147406  0.04445121 -0.01159501 -0.03638469 -0.04069594\n -0.04716281 -0.00189471  0.06169621  0.03906215 -0.08380842  0.01750591\n -0.02884001 -0.00189471 -0.02560657 -0.01806189  0.04229559  0.01211685\n -0.0105172  -0.01806189 -0.05686312 -0.02237314 -0.00405033  0.06061839\n  0.03582872 -0.01267283 -0.07734155  0.05954058 -0.02129532 -0.00620595\n  0.04445121 -0.06548562  0.12528712 -0.05039625 -0.06332999 -0.03099563\n  0.02289497  0.01103904  0.07139652  0.01427248 -0.00836158 -0.06764124\n -0.0105172  -0.02345095  0.06816308 -0.03530688 -0.01159501 -0.0730303\n

But If I increase one dimension in my input data, the following happens: it seems that this is not able to extract the 2D. Some conversion is made server side, from the 2D jsonize to a 1D numpy array, which does not march the dimensionality of the used trained data...

payload_scoring = {"values":[diabetes_X_train.tolist()]}

output:

{"trace": "tbODFulFy7cAIMXZq", "errors": [{"code": "invalid_input_data", "message": "Found array with dim 3. Estimator expected <= 2.", "target": {"name": "values", "type": "field"}}], "status_code": 400}

I think it may be related to the fact that I have a 2D array as X input which turns to be a Vector in reality, I've tried other models like SVM classification with multidimensional input, and this same publishing code works.

Is someone in the same situation? I'm not able to make it work.

I've also tried SoapUI to reach with same results. it seems there's some problem with the deployment.

thanks

Dr G.
  • 1,298
  • 9
  • 17
  • 1
    I think it has to do with how the values are returned. So you have `[[0.0616962065186885], [-0.0514740612388061]...]`, what it wants is `[[0.0616962065186885, -0.0514740612388061]]`. The second example is messing up probably because it's reading `[[[0.0616962065186885], [-0.0514740612388061]]]` instead. That's what I am guessing ... – Dr G. Feb 26 '18 at 19:35
  • Just adding more to above comment. WML expects that you pass 2d array containing one or more arrays containing input values that you want to predict, so For ex. {"fields":["GENDER","AGE","MARITAL_STATUS","PROFESSION"],"values":[["M",23,"Single","PROFESSIONAL"],["F",27,"Married","PROFESSIONAL"]]} – charles gomes Feb 27 '18 at 00:18
  • I don't think that's the issue. I'm performing a single predictor linear regression, each instance I want to predict is composed of one single variable value, not two. As far as I know, I need to pass a column vector, although it has to be a 2D array for the regr.fit function to work properly... – user3540644 Feb 27 '18 at 08:11

0 Answers0