0

Я создал веб-службы Azure ML, который выводит ответ в формате JSON по запросу, и структура запроса выборки выглядит следующим образом:запрос Azure ML Web Service не работает в C#

{ 
    "Inputs": { 
    "input1": { 
     "ColumnNames": [ 
     "gender", 
     "age", 
     "income" 
     ], 
     "Values": [ 
     [ 
      "value", 
      "0", 
      "0" 
     ], 
     [ 
      "value", 
      "0", 
      "0" 
     ] 
     ] 
    } 
    }, 
    "GlobalParameters": {} 
} 

И входные параметры якобы так:

пол Струнный
возраст Числовой
доход Числовой

My Post метод выглядит следующим образом:

[HttpPost] 
     public ActionResult GetPredictionFromWebService() 
     { 
      var gender = Request.Form["gender"]; 
      var age = Request.Form["age"]; 


      if (!string.IsNullOrEmpty(gender) && !string.IsNullOrEmpty(age)) 
      { 
       var resultResponse = _incomeWebService.InvokeRequestResponseService<ResultOutcome>(gender, age).Result; 


       if (resultResponse != null) 
       { 
        var result = resultResponse.Results.Output1.Value.Values; 
        PersonResult = new Person 
        { 
         Gender = result[0, 0], 
         Age = Int32.Parse(result[0, 1]), 
         Income = Int32.Parse(result[0, 2]) 
        }; 
       } 
      } 




      return RedirectToAction("index"); 
     } 

Но по какой-либо причине; Azure ML Webservice, похоже, ничего не ответил на мой запрос. Кто-нибудь знает, в чем причина? Я не вижу ошибки или чего-то еще, просто пустой ответ.

ответ

2

Ответ на вашу проблему заключается в том, что тип данных «Numeric», который записывается во входных параметрах в Azure ML, фактически является поплавком, а не целым числом для вашего показателя дохода. Поэтому, пытаясь запросить ответ от Azure ML, вы не предоставляете ему «адекватную» информацию, необходимую в правильном формате, чтобы она отвечала правильно, в результате чего она не давала вам никакого ответа.

Я считаю, что ваша модель будет выглядеть нечто похожее на это на основе ваших входных параметров:

public class Person 
    { 
     public string Gender { get; set; } 
     public int Age { get; set; } 
     public int Income { get; set; } 


     public override string ToString() 
     { 
      return Gender + "," + Age + "," + Income; 
     } 
    } 

Вы должны изменить тип данных Income в поплавок так:

public class Person 
{ 
    public string Gender { get; set; } 
    public int Age { get; set; } 
    public float Income { get; set; } 

    public override string ToString() 
    { 
     return Gender + "," + Age + "," + Income; 
    } 
} 

и тогда ваш пост-метод будет выглядеть примерно так:

[HttpPost] 
    public ActionResult GetPredictionFromWebService() 
    { 
     var gender = Request.Form["gender"]; 
     var age = Request.Form["age"]; 

     if (!string.IsNullOrEmpty(gender) && !string.IsNullOrEmpty(age)) 
     { 
      var resultResponse = _incomeWebService.InvokeRequestResponseService<ResultOutcome>(gender, age).Result; 

       if (resultResponse != null) 
       { 
        var result = resultResponse.Results.Output1.Value.Values; 
        PersonResult = new Person 
        { 
         Gender = result[0, 0], 
         Age = Int32.Parse(result[0, 1]), 
         Income = float.Parse(result[0, 3], CultureInfo.InvariantCulture.NumberFormat) 
       }; 
      } 
     } 

     ViewBag.myData = PersonResult.Income.ToString(); 
     return View("Index"); 
    } 

Ключ здесь si mply:

Income = float.Parse(result[0, 3], CultureInfo.InvariantCulture.NumberFormat) 

Вместо того, чтобы ваше наследие

Income = Int32.Parse(result[0, 2]) 
+0

Как в мире вы выяснить тип данных с плавающей точкой для свойства дохода? Они оба говорят числовые. – Ernesto

Смежные вопросы