回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>Python3.5(anaconda安装)
SciKit 0.17.1版</p>
<p>我只是不明白为什么<code>train_test_split()</code>给了我我认为不可靠的培训案例列表分割。在</p>
<p>这里有一个例子。
我的列表<code>trnImgPaths</code>有3个类,每个类有67个图像(共201个图像):</p>
<pre><code>['/Caltech101/ferry/image_0001.jpg',
... thru ...
'/Caltech101/ferry/image_0067.jpg',
'/Caltech101/laptop/image_0001.jpg',
... thru ...
'/Caltech101/laptop/image_0067.jpg',
'/Caltech101/airplane/image_0001.jpg',
... thru ...
'/Caltech101/airplane/image_0067.jpg']
</code></pre>
<p>我的目标列表<code>trnImgTargets</code>在长度和类本身与<code>trnImgPaths</code>完全匹配。在</p>
^{pr2}$
<p>如果我跑:</p>
<pre><code>[trnImgs, testImgs, trnTargets, testTargets] = \
train_test_split(trnImgPaths, trnImgTargets, test_size=141, train_size=60, random_state=42)
</code></pre>
<p>或者</p>
<pre><code>[trnImgs, testImgs, trnTargets, testTargets] = \
train_test_split(trnImgPaths, trnImgTargets, test_size=0.7, train_size=0.3, random_state=42)
</code></pre>
<p>或者</p>
<pre><code>[trnImgs, testImgs, trnTargets, testTargets] = \
train_test_split(trnImgPaths, trnImgTargets, test_size=0.7, train_size=0.3)
</code></pre>
<p>虽然我最终得到:</p>
<pre><code>In[150]: len(trnImgs)
Out[150]: 60
In[151]: len(testImgs)
Out[151]: 141
In[152]: len(trnTargets)
Out[152]: 60
In[153]: len(testTargets)
Out[153]: 141
</code></pre>
<p>我从来没有得到一个完美的20-20-20的训练集。我可以通过手动检查和混乱矩阵进行正常检查来判断。
以下分别是上述每个实验的结果:</p>
<pre><code>[[19 0 0]
[ 0 21 0]
[ 0 0 20]]
[[19 0 0]
[ 0 21 0]
[ 0 0 20]]
[[16 0 0]
[ 0 22 0]
[ 0 0 22]]
</code></pre>
<p>我希望这两个部分能完全平衡。有什么想法吗?在</p>
<p>它甚至可能是一个先验的错误分类一些案例,因为一个给定的班级永远不会有n=22个培训案例。在</p>