मुझे यकीन नहीं है कि ML.NET CategoricalOneHotVectorizer उनके नमूना कोड से कैसे काम करता है,

var pipeline = new LearningPipeline
{
    // ... extra code ...
    new CategoricalOneHotVectorizer("VendorId", "RateCode", "PaymentType"),
    // ... extra code ...
    new FastTreeRegressor()
};

मुझे लगता है कि एक बार जब हम मॉडल को प्रशिक्षित करने के लिए मॉडल = पाइपलाइन। ट्रेन () कहते हैं, तो यह केवल श्रेणीबद्ध इनपुट डेटा पर कोडिंग करता है। तो अगर मेरे परीक्षण डेटा में कुछ मान हैं जो इनपुट में नहीं हैं, तो क्या यह भविष्यवाणी के परिणाम को गड़बड़ कर देगा?

आम तौर पर पायथन पर मैं श्रेणीबद्ध चर को एन्कोड करने के लिए उपयोग करने से पहले प्रशिक्षण और परीक्षण डेटा दोनों पर OneHotEncoder को प्रशिक्षित करता हूं। सुनिश्चित नहीं है कि ML.NET के साथ ऐसा कैसे करें

1
HuyNA 12 अक्टूबर 2018, 02:21

1 उत्तर

सबसे बढ़िया उत्तर

आपको अपने मॉडल को प्रशिक्षित करने के लिए अपने परीक्षण डेटा का उपयोग नहीं करना चाहिए। यह एक गलती है. सभी एक हॉट एन्कोडिंग मशीन लर्निंग फ्रेमवर्क एक अनदेखी श्रेणी को डिफ़ॉल्ट रूप से सभी नल के रूप में एन्कोड करेगा। ML.NET v0.7 वही करेगा:

public static void TryOneHot()
{
  var data = Enumerable.Range(1, 4).Select(i => new { A = $"{i}", B = $"{i}" });
  var trainData = data.Take(3).ToArray();
  var testData = data.Skip(3).ToArray();
  using (var env = new ConsoleEnvironment(seed: 1, conc: 1))
  {
    var dataView = env.CreateDataView(trainData).AssertStatic(env, c => (A: c.Text.Scalar, B: c.Text.Scalar));
    var encoderPipe = dataView.MakeNewEstimator()
      .Append(row => (
        A_OH: row.A.OneHotEncoding(),
        B_OH: row.B.OneHotEncoding()
      ));
    var encoder = encoderPipe.Fit(dataView);

    var encodedTrainingData = encoder.AsDynamic.Transform(env.CreateDataView(trainData));
    var raw = encodedTrainingData.GetColumn<float[]>(env, "A_OH").ToArray();

    var encodedTestData = encoder.AsDynamic.Transform(env.CreateDataView(testData));
    var rawUnseen = encodedTestData.GetColumn<float[]>(env, "A_OH").ToArray();
  }
}

यदि आप rawUnseen का निरीक्षण करते हैं, तो आप देखेंगे कि यह [0, 0, 0] एन्कोडेड होगा, क्योंकि इस श्रेणी को कभी नहीं देखा गया है।

3
ClojureMostly 12 अक्टूबर 2018, 07:24