, поэтому я пытался интегрировать мою простую модель Ml, созданную с использованием древовидного классификатора из scikit, и передать ей массив, и это не позволяет мне
код swift ниже:
import UIKit
import CoreML
class ViewController: UIViewController {
var wind = 0
var sky = 0
var temp = 0
@IBOutlet weak var Prediction: UILabel!
@IBOutlet weak var Temperature: UITextField!
@IBOutlet weak var Wind: UITextField!
@IBOutlet weak var Sky: UITextField!
@IBOutlet weak var label1: UILabel!
@IBOutlet weak var label2: UILabel!
let WindCondition = ["Windy","Not Windy"]
let SkyCondition = ["Clear","Not Clear"]
var SkyPicker = UIPickerView()
var WindPicker = UIPickerView()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
SkyPicker.delegate = self
WindPicker.delegate = self
Wind.inputView = WindPicker
Sky.inputView = SkyPicker
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
Temperature.resignFirstResponder()
Wind.resignFirstResponder()
Sky.resignFirstResponder()
}
func featuresdata(){
temp = Int(Temperature.text!)!
print (temp)
print (wind)
print (sky)
let model = RainyDayPredictorPrototype3()
guard let RainyDayPredictorPrototype3 = try? model.prediction(features: [[temp,wind,sky]]) else {
fatalError("Unexpected runtime error.") //Error in this line : Cannot convert value of type '[[Int]]' to expected argument type 'MLMultiArray'
}
}
}
let model = RainyDayPredictorPrototype3()
extension ViewController:UITextFieldDelegate,UIPickerViewDelegate,UIPickerViewDataSource{
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
if pickerView == SkyPicker{
return SkyCondition.count}
else
{
return WindCondition.count
}
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if pickerView == WindPicker{
label1.text = WindCondition[row]
Wind.text = WindCondition[row]
if Wind.text == "Windy" {
wind = 1
}
else
{
wind = 2
}
}
else{
label2.text = SkyCondition[row]
Sky.text = SkyCondition[row]
if Sky.text == "Clear"
{
sky = 3
}
else{
sky = 4
}
}
featuresdata()
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
if pickerView == WindPicker{
return WindCondition[row]
}
else{
return SkyCondition[row]
}
}
}
Код Python моей модели ml ниже:
from sklearn import tree
import coremltools
#windy = 1 ,not windy = 2 | clear sky = 3 ,cloudy sky = 4 |
feat = [[37,2,3],[45,2,3],[26,1,4],[22,1,4]]
lab = [["Not A Rainy Day"],["Not A Rainy Day"],["Rainy Day"],["Rainy Day"]]
temp = 0
wind = 0
sky = 0
Model = tree.DecisionTreeClassifier()
Model.fit(feat,lab)
Model.predict([temp,wind,sky])
CoreML_Model = coremltools.converters.sklearn.convert(Model,"features","labels")
CoreML_Model.save('RainyDayPredictorPrototype3.mlmodel')
Я надеюсь, что код Python кажется правильным, единственная проблема, с которой я столкнулся, - это передача данных в быстром коде, и он отказывается, пожалуйста, помогите мне передать данные в него