'How to transform data from nested List for ML.NET purpose
I want to train model using data stored in database, but i don't have idea, how to transform data to correct format. Data will be use for multiclass classification. In my case, I would like to get some answers to a question from users, and finally display to him the predicted answer to the last question.
In msdn i found, that data should be in format:
HousingData[] inMemoryCollection = new HousingData[]
{
new HousingData
{
Size =700f,
HistoricalPrices = new float[]
{
100000f, 3000000f, 250000f
},
CurrentPrice = 500000f
},
new HousingData
{
Size =1000f,
HistoricalPrices = new float[]
{
600000f, 400000f, 650000f
},
CurrentPrice=700000f
}
};
IDataView data = mlContext.Data.LoadFromEnumerable<HousingData>(inMemoryCollection);
My data looks like:
Questionnaire[] mlmodel = new Questionnaire[] {
new Questionnaire() {
QuestionnaireAnswers = new List < QuestionnaireAnswer > () {
new QuestionnaireAnswer() {
IdQuestion = 1,
IdAnswer = 1,
},
new QuestionnaireAnswer() {
IdQuestion = 2,
IdAnswer = 5,
},
new QuestionnaireAnswer() {
IdQuestion = 3,
IdAnswer = 8,
},
}
},
new Questionnaire() {
QuestionnaireAnswers = new List < QuestionnaireAnswer > () {
new QuestionnaireAnswer() {
IdQuestion = 1,
IdAnswer = 2,
},
new QuestionnaireAnswer() {
IdQuestion = 2,
IdAnswer = 4,
},
new QuestionnaireAnswer() {
IdQuestion = 3,
IdAnswer = 7,
},
}
},
};
And model :
public class Questionnaire
{
[Key] public int IdQuestionnaire { get; set; }
public List<QuestionnaireAnswer> QuestionnaireAnswers { get; set; }
}
public class QuestionnaireAnswer
{
[Key] public int IdQuestionnaireAnswer { get; set; }
[ForeignKey(nameof(Questionnaire))] public int IdQuestionnaire { get; set; }
[ForeignKey(nameof(Question))] public int IdQuestion { get; set; }
[ForeignKey(nameof(Answer))] public int IdAnswer { get; set; }
public Questionnaire Questionnaire { get; set; }
public Question Question { get; set; }
public Answer Answer { get; set; }
}
public class Question
{
[Key] public int IdQuestion { get; set; }
public string Text { get; set; }
public string Slug { get; set; }
public bool IsPredicted { get; set; }
public List<Answer> Answers { get; set; }
}
public class Answer
{
[Key] public int IdAnswer { get; set; }
[ForeignKey("Question")] public int IdQuestion { get; set; }
public string Literal { get; set; }
public string Text { get; set; }
public Question Question { get; set; }
}
P.S. for a better understanding of my data structure, below I put in what it would look like in a spreadsheet

Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
