Я пытаюсь разделить столбец DataFrame score
на несколько разных столбцов, но у меня возникают проблемы, потому что он сообщает мне, что if let scoreColumn = gameTrainingData["score"] as? Column<Dictionary<String, Optional<Any>>>
всегда будет завершаться ошибкой, даже если это тип столбца. Я проверил документацию, чтобы узнать, есть ли встроенная функция для этого, но ее там нет.
Вот что у меня есть на данный момент:
Если кто-то может дать отзыв о том, как правильно создавать новые столбцы из элементов одного столбца для обучения модели, я был бы очень признателен.
Вот столбец score в виде данных JSON:
// Extract relevant information from the 'score' column
if let scoreColumn = gameTrainingData["score"] as? Column<Dictionary<String, Optional<Any>>> {
let winnerColumn = scoreColumn.map { ($0!["winner"] as? String) ?? "UNKNOWN" }
let fullTimeHomeColumn = scoreColumn.map { ($0!["fullTime"] as? [String: Int])?["home"] ?? -1 }
let fullTimeAwayColumn = scoreColumn.map { ($0!["fullTime"] as? [String: Int])?["away"] ?? -1 }
// Add these as new columns to the DataFrame
gameTrainingData.append(column: Column(name: "winner", contents: winnerColumn))
gameTrainingData.append(column: Column(name: "fullTimeHome", contents: fullTimeHomeColumn))
gameTrainingData.append(column: Column(name: "fullTimeAway", contents: fullTimeAwayColumn))
}
// Define feature columns based on the extracted data
let featureColumns = [
"homeTeam",
"awayTeam",
"fullTimeHome",
"fullTimeAway",
"referees"
]
// Model Setup
let parameters = MLRandomForestClassifier.ModelParameters(
validation: .split(strategy: .automatic),
maxIterations: 100,
randomSeed: 38
)
let model = try MLRandomForestClassifier(
trainingData: gameTrainingData,
targetColumn: "winner", // Assuming you're predicting the winner
featureColumns: featureColumns,
parameters: parameters
)
"score": {
duration = REGULAR;
fullTime = {
away = 0;
home = 2;
};
halfTime = {
away = 0;
home = 0;
};
winner = "HOME_TEAM";
}