【问题标题】:Supervised Machine Learning, producing a trained estimator监督机器学习,产生训练有素的估计器
【发布时间】:2016-02-06 17:42:16
【问题描述】:

我有一个作业,我应该使用 scikit、numpy 和 pylab 来执行以下操作:

"以下所有内容都应使用来自 training_data.csv 文件的数据 假如。 training_data 为您提供一组标记的整数对, 代表两个运动队的分数,标签给出 运动。

编写以下函数:

plot_scores() 应该绘制数据的散点图。

predict(dataset) 应该产生一个训练有素的 Estimator 来猜测这项运动 这导致了一个给定的分数(来自我们保留的数据集,这将 作为 1000 x 2 np 数组的输入)。您可以使用 scikit 中的任何算法。

一个称为“预处理”的可选附加功能将处理数据集 在我们通过它来预测之前。 "

这是我到目前为止所做的:

import numpy as np
import scipy as sp
import pylab as pl
from random import shuffle

def plot_scores():
    k=open('training_data.csv')
    lst=[]
    for triple in k:
        temp=triple.split(',')
        lst.append([int(temp[0]), int(temp[1]), int(temp[2][:1])])
    array=np.array(lst)
    pl.scatter(array[:,0], array[:,1])
    pl.show()

def preprocess(dataset):
    k=open('training_data.csv')
    lst=[]
    for triple in k:
        temp=triple.split(',')
        lst.append([int(temp[0]), int(temp[1]), int(temp[2][:1])])
    shuffle(lst)
    return lst

在预处理中,我对数据进行了混洗,因为我应该使用其中的一些来训练和测试,但原始数据根本不是随机的。我的问题是,我应该如何在预测(数据集)中“产生训练有素的估计器”?这应该是一个返回另一个函数的函数吗?哪种算法最适合根据如下所示的数据集进行分类:

【问题讨论】:

    标签: algorithm python-2.7 numpy machine-learning scikit-learn


    【解决方案1】:

    我认为您正在寻找的是 clf.fit() 函数,而不是创建产生另一个函数的函数

    【讨论】:

      【解决方案2】:

      我建议你看看这个结构:

      from random import shuffle
      import matplotlib.pyplot as plt
      # import a classifier you need
      
      
      def get_data():
          # open your file and parse data to prepare X as a set of input vectors and Y as a set of targets
          return X, Y
      
      
      def split_data(X, Y):
          size = len(X)
          indices = range(size)
          shuffle(indices)
          train_indices = indices[:size/2]
          test_indices = indices[size/2:]
          X_train = [X[i] for i in train_indices]
          Y_train = [Y[i] for i in train_indices]
          X_test = [X[i] for i in test_indices]
          Y_test = [Y[i] for i in test_indices]
          return X_train, Y_train, X_test, Y_test
      
      
      def plot_scatter(Y1, Y2):
          plt.figure()
          plt.scatter(Y1, Y2, 'bo')
          plt.show()
      
      
      # get data
      X, Y = get_data()
      
      # split data
      X_train, Y_train, X_test, Y_test = split_data(X, Y)
      
      # create a classifier as an object
      classifier = YourImportedClassifier()
      
      # train the classifier, after that the classifier is the trained estimator you need
      classifier.train(X_train, Y_train) # or .fit(X_train, Y_train) or another train routine
      
      # make a prediction
      Y_prediction = classifier.predict(X_test)
      
      # plot the scatter
      plot_scatter(Y_prediction, Y_test)
      

      【讨论】:

        【解决方案3】:

        该任务可能希望您训练一个标准的 scikit 分类器模型并将其返回,即类似于

        from sklearn.svm import SVC
        def predict(dataset):
            X = ... # features, extract from dataset
            y = ... # labels, extract from dataset
            clf = SVC() # create classifier
            clf.fit(X, y) # train
            return clf
        

        虽然从函数的名称 (predict) 来看,您应该检查它是否真的希望您返回经过训练的分类器或返回给定 dataset 参数的预测,因为这更典型。

        作为分类器,您基本上可以使用您喜欢的任何人。您的情节看起来像您的数据集是线性可分离的(类没有颜色,但我假设这些斑点是两个类)。在线性可分数据上,几乎没有任何事情会失败。尝试支持向量机、逻辑回归、随机森林、朴素贝叶斯……为了获得更多乐趣,您可以尝试绘制决策边界,请参阅here(其中还包含可用分类器的概述)。

        【讨论】:

          猜你喜欢
          • 2020-05-06
          • 2016-05-28
          • 2017-06-15
          • 2017-02-21
          • 2011-11-09
          • 2017-08-21
          • 2018-10-17
          • 2017-09-21
          • 1970-01-01
          相关资源
          最近更新 更多