我正在尝试通过 GridSearchCV 找到最佳的 xgboost 模型,并且作为 cross_validation 我想使用 4 月的目标数据。这是代码:
    x_train.head()
    y_train.head()
    from sklearn.model_selection import GridSearchCV
    from sklearn.model_selection import train_test_split
    from sklearn.metrics import mean_squared_error
    from sklearn.metrics import make_scorer
    from sklearn.ensemble import RandomForestRegressor
    from sklearn.model_selection import TimeSeriesSplit
    import xgboost as xg
    xgb_parameters={'max_depth':[3,5,7,9],'min_child_weight':[1,3,5]}
    xgb=xg.XGBRegressor(learning_rate=0.1, n_estimators=100,max_depth=5, min_child_weight=1, gamma=0, subsample=0.8, colsample_bytree=0.8)
    model=GridSearchCV(n_jobs=2,estimator=xgb,param_grid=xgb_parameters,cv=train_test_split(x_train,y_train,test_size=len(y_train['2016-04':'2016-04']), random_state=42, shuffle=False),scoring=my_func)
    model.fit(x_train,y_train)
    model.grid_scores_
    model.best_params_
但是我在训练模型时遇到了这个错误。
有人可以帮我解决这个问题吗?或者有人可以建议我如何分割非洗牌数据来训练/测试以验证上个月的模型?
感谢您的帮助
python machine-learning cross-validation grid-search train-test-split
如何使用基于时间的拆分将数据拆分为训练和测试。
我知道train_test_split会随机拆分它,以及如何根据时间拆分它。
  X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42) 
  # this splits the data randomly as 67% test and 33% train
如何在67%的训练和33%的测试时基于时间拆分相同的数据集?
数据集具有一列TimeStamp。
我尝试搜索类似的问题,但不确定该方法。
有人可以简要解释一下吗
有一个数据框,总共由 14 列组成,最后一列是整数值为 0 或 1 的目标标签。
我已经定义:
X = df.iloc[:,1:13]---- 这由特征值组成y = df.iloc[:,-1]------ 这由相应的标签组成两者具有所需的相同长度,X是由 13 列组成的数据框,形状为 (159880, 13),y是形状为 (159880,) 的数组类型
但是当我执行train_test_split(), X-时y,该功能无法正常工作。
下面是简单的代码:
X_train, y_train, X_test, y_test = train_test_split(X, y, random_state = 0)
分裂之后, 和X_train都X_test具有形状 (119910,13)。y_train具有形状 (39970,13) 并且y_test具有形状 (39970,)
这很奇怪,即使在定义test_size参数之后,结果仍然保持不变。
请指教,可能出了什么问题。
import pandas as pd
import numpy as np
from sklearn.tree import DecisionTreeClassifier
from adspy_shared_utilities import …我正在尝试使用 DecisionTreeClassifier 创建机器学习模型。为了训练和测试我的数据,我train_test_split从 scikit learn导入了方法。但我无法理解其名为random_state.             
random_state为model_selection.train_test_split函数分配数值的意义是什么,我怎么知道要为我的决策树分配 random_state 哪个数值?                                          
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=324)
python machine-learning python-3.x scikit-learn train-test-split
我在这里有点困惑......我刚刚花了最后一个小时阅读有关如何在 TensorFlow 中将数据集拆分为测试/训练的内容。我正在按照本教程导入我的图像: https: //www.tensorflow.org/tutorials/load_data/images。显然,可以使用 sklearn: 分为训练/测试model_selection.train_test_split。  
但我的问题是:我什么时候将数据集拆分为训练/测试。我已经用我的数据集完成了此操作(见下文),现在怎么办?我该如何分割它?我必须在加载文件之前执行此操作吗tf.data.Dataset?
# determine names of classes
CLASS_NAMES = np.array([item.name for item in data_dir.glob('*') if item.name != "LICENSE.txt"])
print(CLASS_NAMES)
# count images
image_count = len(list(data_dir.glob('*/*.png')))
print(image_count)
# load the files as a tf.data.Dataset
list_ds = tf.data.Dataset.list_files(str(cwd + '/train/' + '*/*'))
另外,我的数据结构如下所示。没有 test 文件夹,没有 val 文件夹。我需要从该火车组中抽取 20% 进行测试。
train
 |__ class 1
 |__ class 2
 |__ class 3
在提出这个问题之前,我不得不说,我已经在此板上彻底阅读了15个以上的相似主题,每个主题都有不同的建议,但是所有这些都无法使我正确。
好的,所以我使用CountVectorizer及其“ fit_transform”函数将语料库的文本数据(最初为csv格式)分为训练集和测试集,以适应语料库的词汇量并从文本中提取字数统计功能。然后,我应用MultinomialNB()从训练集中学习并预测测试集。这是我的代码(简体):
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.cross_validation import train_test_split
from sklearn.naive_bayes import MultinomialNB
# loading data 
# data contains two columns ('text', 'target')
spam = pd.read_csv('spam.csv')
spam['target'] = np.where(spam_data['target']=='spam',1,0)
# split data
X_train, X_test, y_train, y_test = train_test_split(spam_data['text'], spam_data['target'], random_state=0) 
# fit vocabulary and extract word count features
cv = CountVectorizer()
X_traincv = cv.fit_transform(X_train)  
X_testcv = cv.fit_transform(X_test)
# learn and predict using MultinomialNB
clfNB = MultinomialNB(alpha=0.1)
clfNB.fit(X_traincv, y_train)
# so far so good, but when I predict on …我有大约 30% 和 70% 的 0 类(少数类)和 1 类(多数类)。由于我没有很多数据,我计划对少数类进行过采样以平衡这些类,使其成为 50-50 的分割。我想知道是否应该在将数据拆分为训练集和测试集之前或之后进行过采样。我通常在在线示例中拆分之前看到它完成,如下所示:
df_class0 = train[train.predict_var == 0]
df_class1 = train[train.predict_var == 1]
df_class1_over = df_class1.sample(len(df_class0), replace=True)
df_over = pd.concat([df_class0, df_class1_over], axis=0)
然而,这是否意味着测试数据可能有来自训练集的重复样本(因为我们对训练集进行了过采样)?这意味着测试性能不一定基于新的、看不见的数据。我这样做很好,但我想知道什么是好的做法。谢谢!
classification machine-learning scikit-learn train-test-split imbalanced-data
我有一个数据框如下
df = pd.DataFrame({"Col1": ['A','B','B','A','B','B','A','B','A', 'A'],
                   "Col2" : [-2.21,-9.59,0.16,1.29,-31.92,-24.48,15.23,34.58,24.33,-3.32],
                   "Col3" : [-0.27,-0.57,0.072,-0.15,-0.21,-2.54,-1.06,1.94,1.83,0.72],
                   "y" : [-1,1,-1,-1,-1,1,1,1,1,-1]})
    
       Col1 Col2    Col3    y
    0   A   -2.21   -0.270  -1
    1   B   -9.59   -0.570   1
    2   B    0.16    0.072  -1
    3   A    1.29   -0.150  -1
    4   B   -31.92  -0.210  -1
    5   B   -24.48  -2.540   1
    6   A    15.23  -1.060   1
    7   B    34.58   1.940   1
    8   A    24.33   1.830   1
    9   A   -3.32    0.720  -1
有没有办法分割数据帧(60:40 分割),以便每组的前 60% 的值Col1将被训练,最后 40% 的值将被测试。
火车 …
我有一个这样的数据集
my_data= [['Manchester', '23', '80', 'CM',
  'Manchester', '22', '79', 'RM',
  'Manchester', '19', '76', 'LB'],
 ['Benfica', '26', '77', 'CF',
  'Benfica', '22', '74', 'CDM',
  'Benfica', '17', '70', 'RB'],
 ['Dortmund', '24', '75', 'CM',
  'Dortmund', '18', '74', 'AM',
  'Dortmund', '16', '69', 'LM']
]
我知道使用 sklearn.cross_validation 中的 train_test_split,我已经尝试过
from sklearn.model_selection import train_test_split
train, test = train_test_split(my_data, test_size = 0.2)
结果只是分成测试和训练。我想用随机数据将它分成 3 个单独的集合。
预期: 测试、训练、有效
我是 sklearn 的一个相对较新的用户,并且对使用train_test_splitsklearn.model_selection 有疑问。我有一个形状为 (96350, 156) 的大型数据框。在我的数据框中,名为列的列CountryName包含 160 个国家/地区,每个国家/地区大约有 600 个实例。
输入:
df['CountryName'].unique()
输出:
array(['Aruba', 'Afghanistan', 'Angola', 'Albania', 'Andorra',
       'United Arab Emirates', 'Argentina', 'Australia', 'Austria',
       'Azerbaijan', 'Belgium', 'Benin', 'Burkina Faso', 'Bangladesh',
       'Bulgaria', 'Bahrain', 'Bahamas', 'Bosnia and Herzegovina',
...
       'Slovenia', 'Sweden', 'Eswatini', 'Seychelles', 'Chad', 'Togo',
       'Thailand', 'Trinidad and Tobago', 'Tunisia', 'Turkey', 'Taiwan',
       'Tanzania', 'Uganda', 'Ukraine', 'Uruguay', 'United States',
       'Uzbekistan', 'Venezuela', 'Vietnam', 'South Africa', 'Zambia',
       'Zimbabwe'], dtype=object)
我如何train_test_split在国家层面而不是实例层面实施?为了更好地理解我的问题,我制作了快速表格,这是我的数据框。我如何train_test_split在阿鲁巴等国家/地区执行此操作(因此我们从该阿鲁巴国家/地区获得 70% 的训练数据和 30% 的测试数据),并对所有国家/地区执行此操作,最后添加这些训练/测试(X_train、X_test、y_train 和y_test)数据一起放在另一个数据框中?
可视化: …
train-test-split ×10
python ×8
scikit-learn ×7
pandas ×2
python-3.x ×2
grid-search ×1
naivebayes ×1
timestamp ×1