【问题标题】:Train test split mysql records into views训练测试将 mysql 记录拆分为视图
【发布时间】:2021-08-28 05:21:39
【问题描述】:

如何创建两个视图,一个用于训练数据,另一个用于测试数据 70:30 在 mySql 中拆分。

CREATE VIEW training_data
AS
SELECT Posts.post_content as post_content,
    CASE 
        WHEN (Posts.post_title like '%covid%corona%covid19%' or Posts.post_content like '%covid%corona%covid19%') THEN 1 
        ELSE 0
    END AS tag 
FROM Posts;

CREATE VIEW test_data
AS
SELECT Posts.post_content as post_content,
    CASE 
        WHEN (Posts.post_title like '%covid%corona%covid19%' or Posts.post_content like '%covid%corona%covid19%') THEN 1 
        ELSE 0
    END AS tag 
FROM Posts;

【问题讨论】:

  • 枚举(ROW_NUMBER 函数),同时按一些唯一的表达式排序,然后根据这个数字和提供所需关系的表达式进行选择。
  • 你能帮我举个例子吗,我对 SQL 很陌生

标签: mysql train-test-split


【解决方案1】:
CREATE VIEW training_data
AS
WITH cte AS ( SELECT Posts.post_content as post_content,
                     CASE WHEN Posts.post_title like '%covid%corona%covid19%'
                          THEN 1
                          WHEN Posts.post_content like '%covid%corona%covid19%' 
                          THEN 1 
                          ELSE 0 END AS tag,
                     ROW_NUMBER() OVER (ORDER BY id) rn
              FROM Posts )
SELECT post_content, tag
FROM cte
WHERE rn MOD 10 IN (0,1,3,4,6,7,9);

CREATE VIEW test_data
AS
WITH cte AS ( SELECT Posts.post_content as post_content,
                     CASE WHEN Posts.post_title like '%covid%corona%covid19%'
                          THEN 1
                          WHEN Posts.post_content like '%covid%corona%covid19%' 
                          THEN 1 
                          ELSE 0 END AS tag,
                     ROW_NUMBER() OVER (ORDER BY id) rn
              FROM Posts )
SELECT post_content, tag
FROM cte
WHERE rn MOD 10 IN (2,5,8);

考虑到 - 由于全扫描,这两个查询都很慢。我建议您将带有tag 表达式的生成列添加到表结构中以进行改进。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-30
    • 2021-03-02
    • 1970-01-01
    • 2021-05-24
    • 2021-06-28
    • 2021-04-19
    • 2018-12-21
    相关资源
    最近更新 更多