【问题标题】:How to split a DataFrame or Matrix into train and test sets on value not row?如何将 DataFrame 或 Matrix 拆分为值而不是行的训练集和测试集?
【发布时间】:2015-09-26 18:12:09
【问题描述】:

我有一个稀疏矩阵 G,其值(非 nan 值)需要拆分为测试/训练集。 sklearn 中的 test_train_split 函数在行上拆分,但我希望它在实际索引上拆分。这大概就是我想要做的事情

 1. test, train = split non-nan values in G (80/20-train/test)
 2. test_and_nan = combine test and nan sets
 3. G2 = G.copy()
 4. G2[ test_and_nan ] = 0 // initialize to 0 before imputing
 5. 
 6. do until norm(G2, frobenius) doesnt change much from last iteration
 7.     S,C = nmf(G2)
 8.     // use nmf decomposition to impute test_and_nan values
 9.     G2[ test_and_nan ] = (S*C)[ test_and_nan ]
10.
11. compute rmse( G[test] - G2[test] )

我想使用布尔掩码来选择索引,但我不知道该怎么做。任何帮助将不胜感激。

【问题讨论】:

    标签: python numpy pandas scikit-learn


    【解决方案1】:

    您可以使用具有数据大小(数字元素)的随机向量来拆分索引。 像这样的:

    TRAIN_SIZE = 0.80
    # Create boolean mask
    # np.random creates a vector of random values between 0 and 1
    # Those values are filtered to create a binary mask
    msk = np.random.rand(len(data)) < TRAIN_SIZE
    
    train = data[msk]  
    test = data[~msk]  # inverse of boolean mask
    

    【讨论】:

    • 这会拆分所有数据,是否可以只拆分非空值?
    • 是的。您可以使用稀疏矩阵的 .indices 属性并拆分这些值
    • 我没有意识到有一个实际的稀疏矩阵包。我的意思是稀疏,因为有很多值代码为 NaN。 G 是一个 DataFrame 或 ndarray。
    猜你喜欢
    • 2016-02-22
    • 2023-01-24
    • 1970-01-01
    • 2017-11-01
    • 2017-07-17
    • 1970-01-01
    • 2017-06-11
    • 2017-06-04
    • 2019-05-01
    相关资源
    最近更新 更多