监督机器学习,生成训练好的估计器

我有一个作业,需要使用scikit、numpy和pylab来完成以下任务:

“所有以下操作都应使用提供的training_data.csv文件中的数据。training_data为您提供了一组标记的整数对,表示两个运动队的得分,标签给出了运动类型。

编写以下函数:

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

predict(dataset) 应生成一个训练好的估计器,用于猜测给定得分所对应的运动(来自我们保留的数据集,将作为1000 x 2的np数组输入)。您可以使用scikit中的任何算法。

一个可选的附加函数名为“preprocess”,将在数据集传递给predict之前对其进行处理。”

这是我目前所做的:

import numpy as npimport scipy as spimport pylab as plfrom random import shuffledef 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

在preprocess中,我对数据进行了洗牌,因为我需要用其中的一部分进行训练,另一部分进行测试,但原始数据完全不随机。我的问题是,如何在predict(dataset)中“生成训练好的估计器”?这是否应该是一个返回另一个函数的函数?对于看起来像这样的数据集,哪种算法最适合进行分类: enter image description here


回答:

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

from sklearn.svm import SVCdef predict(dataset):    X = ... # 特征,从数据集中提取    y = ... # 标签,从数据集中提取    clf = SVC() # 创建分类器    clf.fit(X, y) # 训练    return clf

不过,从函数名称(predict)来看,您应该检查它是否真的希望您返回一个训练好的分类器,还是返回给定dataset参数的预测结果,因为后者更为常见。

作为分类器,您基本上可以使用任何您喜欢的。您的图表看起来数据集是线性可分的(没有为类别着色,但我假设那些团块是两个类别)。对于线性可分的数据,几乎没有什么会失败。尝试使用SVM、逻辑回归、随机森林、朴素贝叶斯等。为了增加乐趣,您可以尝试绘制决策边界,参见这里(其中还包含了可用分类器的概览)。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注