交差検証のデータセットの分け方について

自分と同じ疑問を抱いている人がいた。
detail.chiebukuro.yahoo.co.jp
交差検証でTrain, Val, Testに分けるとき、Testを恣意的に分けてしまってよいのかという疑問。すなわちTestについてもCross validationする必要があるのでは?ということ。
通例では恣意的にTestを分離してしまうようである(少なくとも機械学習の入門書籍などでは)。上記にも記述があるが、時系列データであれば時間ごとに区切ったり、あるいは事前に全データについてクラスタリングを行って分けるなどの方法がある。train_test_split()でstratify=Trueにすれば、ラベルyの偏りを減らすことはできる(一方でstratify=Trueであっても特徴量Xの分布を考慮できるわけではない)。
[追記:ネストした交差検証]
Pythonではじめる機械学習 scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎、に上記を解決する一つの方法の記述がある。
以下のようにGridSearchCV()の外側にcross_val_score()を設けると、train dataとtest dataの分割にも交差検証が適用される。

scores = cross_vaL_score(GridSearchCv(SVC(), param_grid, cv=5), iris.data, iris.target, cv=5)
print("Cross-validation scores: ", scores) 
print("Mean cross-validation score: ", scores.meanO)