快速将数据传递到MLMulti数组时出错

时间:2018-09-01 13:08:03

标签: python swift xcode machine-learning

所以我一直在尝试整合使用scikit中使用树分类器创建的简单Ml模型,并将数组传递给它,但它不允许我

快速代码如下:

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]
    }


}


}

我的ml模型的python代码如下:

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代码似乎是正确的,我唯一的问题是在以快速代码传递数据时拒绝它,请帮助我将数据传递给它

0 个答案:

没有答案