如何在python中将每个用户ID的评级数据分为训练和测试集,以便所有用户都处于训练和测试集中?

时间:2019-05-12 17:27:41

标签: python recommender-systems train-test-split

我正在尝试将评分数据(包含用户ID,项目,评分,review_time)拆分为训练/测试集,以使每个用户80%的评论进入训练集,而其余20%测试集。如何为每个用户拆分数据?

我正在Python 3.7中运行代码。最初,我尝试将sklearn模块中的stratify参数与train_test_split()结合使用,但是会出现以下错误“ y中人口最少的类只有1个成员,这太少了。任何类的最小组数不能少于比2.”。此外,我尝试从另一个类似的反馈中使用等级/计数> 0.8技巧,但是在我的情况下,它没有做应做的事情。

$app_id = SOCIALS_LOGIN_FB_APP_ID;
$app_secret = SOCIALS_LOGIN_FB_APP_SECRET;
$siteurl = current(explode('?zenid', htmlspecialchars_decode(zen_href_link('socials_login', 'id=facebook'))));

$facebook = new Facebook\Facebook([
    'app_id' => $app_id,
    'app_secret' => $app_secret,
    'default_graph_version' => 'v3.2',
]);

$helper = $facebook->getRedirectLoginHelper();

try {

// check access token
  //$accessToken = $helper->getAccessToken($siteurl);
    $accessToken = $helper->getAccessToken();   
//echo '<pre>'; var_dump($siteurl); echo '</pre>';die;

  if(empty($accessToken)) {

// redirect to facebook and get access token
    $permissions = ['email']; // Optional permissions
    $loginUrl = $helper->getLoginUrl($siteurl, $permissions);
    echo '<script type="text/javascript">top.location.href = "' . $loginUrl . '"</script>';
    exit();

  } else {

    $response = $facebook->get('/me?fields=id,name,email', $accessToken);
    $user = $response->getGraphUser();
            //echo '<pre>'; var_dump($user);echo '</pre>';die;
    $email_address = $user['email'];

  }


} catch(Facebook\Exceptions\FacebookResponseException $e) {
  // When Graph returns an error
  echo 'Graph returned an error: ' . $e->getMessage();
  exit;
} catch(Facebook\Exceptions\FacebookSDKException $e) {
  // When validation fails or other local issues
  echo 'Facebook SDK returned an error: ' . $e->getMessage();
  exit;
}

$redirect_to_login = true;  
break;

我希望代码会以这样的方式泄漏数据:只有1条评论的用户才能进入火车训练集,但是拥有3条评论(3 * 0.8 = 2.4)的评论者的2条评论就会进入火车训练测试集中有一个复习题。目的是使所有用户(如果可能)都处于训练和测试集中。

0 个答案:

没有答案