数据前处理sklearn的SVM不使用train_test_split方法

问题描述 投票:0回答:1

我用初始和1000点产生的特征(对象的概率)为约11000〜影片。这些视频已经被分类按流派,我想的SVM预测视频属于哪个流派。

我想SVM适用于这些特征向量,但每次我到目前为止阅读教程使用从train_test_splitsklearn.model_selection方法。

如何我的数据看起来:

  • 我已经分开我的数据集分为两个CSV文件适用〜9000的培训和〜2000的测试(每1000层的功能)的记录。这是一个在videoId,feature1,feature2,...,feature1000的格式
  • 我所拥有的文件与流派如标题如Training/education.txt培训和Testing/education.txt进行测试。每个文件包含属于videoIds到所述流派。

我是新来的数据的科学像熊猫库,sklearn等,所以我失去了我应该怎么准备这个数据。我一直在关注this guide

import pandas as pd  

bankdata = pd.read_csv("D:/Datasets/bill_authentication.csv")  
X = bankdata.drop('Class', axis=1)  
y = bankdata['Class']  
from sklearn.model_selection import train_test_split  
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.20)  

我将如何去获得qazxsw POI,qazxsw POI,qazxsw POI,qazxsw POI与我有什么?我不能使用像因为我的数据是如何在目前成立X_train方法。

pandas scikit-learn svm
1个回答
2
投票

所有的教程,建议您从X_test使用y_train的原因是因为他们认为你将要评估你的学习模型的性能,并可能调整其超参数之前,你终于可以用它来生成您的测试数据集的预测。

这种做法被称为留出“交叉验证”设置。要做到这一点,你离开你的测试设置不变暂时的,居然在你的训练集的行的20%分离出来的。你训练你的训练集的行的80%,你的模型,并使用该模型来生成对你的训练集,剩下的20%的预测。

您可以选择一个指标,如y_test,来判断你的模型的性能。通常情况下,它在这一点上,你会想尝试演模型的train_test_split不同的值进行试验,看其对验证集(训练集的,去年20%)得分是否有所改善。

train_test_split方法只是对你的训练数据分成这些80/20部分的简单方法。我建议你不要跳过此步骤。原因是,如果你要改变你的模型或观察它如何执行你的实际测试集后的超参数,你会失去知道如何模型将在全新的,真实世界的数据进行任何基础。

这就是所谓的“过度拟合测试集”,它是实践的一个常见的错误,导致机器学习模型,一组先前收集的数据的表现非常好,但(它们的创造者的惊讶),最终的表现相当可怕在这些模型看时,他们终于投产了真实的数据。

总之事情了,这个想法是,你:

  1. 火车火车了80%的数据。
  2. 评估你的训练数据的20%。
  3. 更改模型,直到你满意,它是如何在步骤(2)中使用的数据的得分。
  4. 最后,只有在最后,用你的模型,使您的实际测试数据的预测。

顺便说一句,该方法sklearn.model.selection的Sklearn的命名有点令人迷惑,因为该方法的目的是验证组的创建。 (accuracy似乎我是一个更直观的名字......)

下面是步骤,在代码中,我想你想跟着给你的特殊情况(在多个.txt文件数据分割):

  1. 进口模块和您的所有训练的.csv文件:
hyperparameters
  1. 在每个类型的数据帧创建train_test_split列,然后串联所有这些到一个数据帧:
train_test_split
  1. 提取训练数据标签(我假设标签是一列名为train_val_split或类似的东西)和下降import pandas as pd import numpy as np from sklearn.metrics import accuracy_score from sklearn.svm import SVC from sklearn.model_selection import train_test_split X_edu = pd.read_csv('Training/education.txt') X_hor = pd.read_csv('Training/horror.txt') ... 列(因为它不会出现,这是一个预测功能):
Genre
  1. 使用train_dfs = [X_edu, X_hor, ...] genres = ['edu', 'hor', ...] for i, genre in enumerate(genres): train_dfs[i]['Genre'] = genre X = pd.concat[train_dfs].reset_index(drop=True) # reset the index so each row has a unique index # important so we can be sure we can properly match each row with its label 创建您的培训和验证集(不错的奖金:Genre自动洗牌整个训练数据框的行拆分之前,所以你不必担心你的验证组不被某些类型):
videoID
  1. 适合你的模型y = X['Genre'] X = X.drop(['Genre', 'videoID'], axis=1) 并就train_test_split预测:
train_test_split
  1. 确定你的模型上的验证组制作这些预测的性能(我用的精度在这里,但你可以使用任何你想要的指标 - Sklearn可能有任何指标你想使用一个类)
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size = 0.20)
  1. 实验为您的SVM学习者的X_train不同的值,并重复步骤(5)和(6)以上。当你满意你的车型的性能,现在是时候去生成你的实际测试数据预测的时间。 您可以在测试的.csv文件加载每个流派聚集在一起将他们都就像你做你的训练数据上面一个数据帧:
X_val

而这个测试集的准确度得分应该给你最真实的估计可能如何你的模型会过得它应该被要求做一个全新的视频它从未见过的预测。

© www.soinside.com 2019 - 2024. All rights reserved.