我有一个数据集,需要用它来训练(fit
)我的machine learning
算法:
data= [ {'timestamp': '1406025645732', 'datatype': 'mass', 'fat': '0.348', 'lean': '0.06'}, {'timestamp': '1406025645776', 'datatype': 'body', 'value': 122.0, 'location': 'nose'}, {'timestamp': '1406025645793', 'datatype': 'mass', 'fat': '0.32', 'lean': '0.04'}, {'timestamp': '1406025645810', 'datatype': 'mass', 'fat': '0.308', 'lean': '0.1'}, {'timestamp': '1406027645916', 'datatype': 'body', 'value': 6.0, 'location': 'eye'}, {'timestamp': '1406025645949', 'datatype': 'mass', 'fat': '0.312', 'lean': '0.052'}, {'timestamp': '1406025645966', 'datatype': 'mass', 'fat': '0.32', 'lean': '0.032'}, {'timestamp': '1406025645983', 'datatype': 'mass', 'fat': '0.28', 'lean': '0.06'}, {'timestamp': '1406025646000', 'datatype': 'gender', 'value': '0.3096', 'size': '7.0'}]
我的数据样本包含三种数据类型:
body
mass
gender
每种数据类型的样本数量是随机的(例如,有时我可能有10个mass
样本和1个gender
样本。或者我可能有300个mass
样本和20个body
样本)。
无论如何,我希望使用这种不一致的数据来构建训练集。
这是可能的吗?
对于这种情况,最佳的scikit-learn训练算法是什么?
- 逻辑回归?
- 朴素贝叶斯?
- k-最近邻?
- 分类与回归树?
- 支持向量机?
这里有一些示例代码,但我不知道下一步该怎么做才能实现这个目标。
请指导我应该遵循哪些步骤,或者推荐一些教程,我可以学习并在这里粘贴解决方案。
from sklearn import treefrom sklearn.externals import joblibimport pandasimport numpyimport pylab# 这是Abel的一个训练集features = [ {'timestamp': '1406025645732', 'datatype': 'mass', 'fat': '0.348', 'lean': '0.06'}, {'timestamp': '1406025645776', 'datatype': 'body', 'value': 122.0, 'location': 'nose'}, {'timestamp': '1406025645793', 'datatype': 'mass', 'fat': '0.32', 'lean': '0.04'}, {'timestamp': '1406025645810', 'datatype': 'mass', 'fat': '0.308', 'lean': '0.1'}, {'timestamp': '1406027645916', 'datatype': 'body', 'value': 6.0, 'location': 'eye'}, {'timestamp': '1406025645949', 'datatype': 'mass', 'fat': '0.312', 'lean': '0.052'}, {'timestamp': '1406025645966', 'datatype': 'mass', 'fat': '0.32', 'lean': '0.032'}, {'timestamp': '1406025645983', 'datatype': 'mass', 'fat': '0.28', 'lean': '0.06'}, {'timestamp': '1406025646000', 'datatype': 'gender', 'value': '0.3096', 'size': '7.0'}]# 0代表Abel,1代表Jasminnelabels = [0]# 这里我用上述数组训练模型clf = tree.DecisionTreeClassifier()clf = clf.fit(features, labels) # 由于使用了字典而不是数组,这里会崩溃joblib.dump(clf, 'model.pkl')
非常感谢。
回答:
当你的数据集可以拟合成线性图时,应用逻辑回归。由于你的数据集包含多个特征,你可以选择使用KNN、决策树、朴素贝叶斯。KNN简单但计算量大。决策树[CART]是一个更好的选择,因为算法能够理解数据,而不像KNN。如果你熟悉SVM的概念,你可以尝试使用它,但这需要深入的理解。