【机器学习】 关于 “ X_set[y_set == j, 0] ” 的含义

本文深入解析了NumPy库中布尔索引的使用方法,通过实例展示了如何利用布尔索引筛选数组元素,并结合matplotlib库的scatter函数,实现基于条件的散点图绘制,有助于理解数据可视化中的数据筛选与呈现。

源代码:

for i, j in enumerate(np.unique(y_set)):
    plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],
                c=ListedColormap(('orange', 'blue'))(i), label=j)

 首先:举一个简单例子:


>>> import numpy as np
>>> x = np.array([[1, 2], [3, 4], [5, 6]])
>>> rowsum = x.sum(-1)
>>> rowsum
array([ 3,  7, 11])
>>> x[rowsum <= 7, :]
array([[1, 2],
       [3, 4]])
>>> x[rowsum <= 7, 1]
array([2, 4])
>>> x[rowsum <= 7, 0]
array([1, 3])

 

 这里x[rowsum <= 7, :] 

当rowsum=3时,rowsum<=7为True,返回x第0行的每一列

当rowsum=7时,rowsum<=7为True,返回x第1行的每一列

当rowsum=11时,rowsum<=7为False,不返回矩阵值

 

同理, 这里x[rowsum <= 7, 0] 

当rowsum=3时,rowsum<=7为True,返回x第0行的第0列

当rowsum=7时,rowsum<=7为True,返回x第1行的第0列

当rowsum=11时,rowsum<=7为False,不返回矩阵值

可以看出,rowsum<=7这个bool类型是控制每一行数据是否输出,而后面的0或者1则是控制输出某一列

综上,个人理解:X_set[y_set == j, 0]大概可以理解为当y_set==j为真时,取X_set当前行第0列的值并且执行scatter函数,为假时,不返回X_set矩阵值同时也不执行scatter函数。

有问题可以评论留言,我会及时回复  :P

 

 

### 代码含义 #### `x_valid, y_valid = x_test[0][cv_set[valid_index]], y_test[0][cv_set[valid_index]]` 此代码的作用是从 `x_test` 和 `y_test` 里选取一部分数据,将其分别赋值给 `x_valid` 和 `y_valid`。具体来说: - `x_test[0]`:访问 `x_test` 这个序列的第一个元素,假定 `x_test` 是列表或者数组,这里获取的就是第一个数组。 - `cv_set[valid_index]`:`cv_set` 一般为数组或者列表,`valid_index` 是一个索引值,`cv_set[valid_index]` 会返回 `cv_set` 中对应索引的元素,该元素通常也是一个索引。 - `x_test[0][cv_set[valid_index]]`:从 `x_test` 的第一个数组里,根据 `cv_set[valid_index]` 这个索引来选取数据。 - `y_test[0][cv_set[valid_index]]`:同理,从 `y_test` 的第一个数组里,依据 `cv_set[valid_index]` 这个索引选取数据。 #### `x__test, y__test = x_test[0][cv_set[test__index]], y_test[0][cv_set[test__index]]` 与上一条代码相似,此代码是从 `x_test` 和 `y_test` 中选取另一部分数据,分别赋值给 `x__test` 和 `y__test`。`test__index` 用于指定测试集的索引。 ### 代码用途 这两行代码主要用于在交叉验证时,划分验证集和测试集。在机器学习里,为了评估模型的性能,会把数据划分为训练集、验证集和测试集。验证集用于在训练过程中对模型进行评估,从而调整模型的超参数;测试集则用于在模型训练完成后,对其最终性能进行评估。 ### 代码示例 ```python import numpy as np # 模拟 x_test 和 y_test x_test = [np.array([1, 2, 3, 4, 5])] y_test = [np.array([10, 20, 30, 40, 50])] # 模拟 cv_set cv_set = np.array([0, 2, 4]) # 模拟 valid_index 和 test__index valid_index = 0 test__index = 1 # 划分验证集 x_valid, y_valid = x_test[0][cv_set[valid_index]], y_test[0][cv_set[valid_index]] # 划分测试集 x__test, y__test = x_test[0][cv_set[test__index]], y_test[0][cv_set[test__index]] print("验证集特征:", x_valid) print("验证集标签:", y_valid) print("测试集特征:", x__test) print("测试集标签:", y__test) ``` ### 可能存在的问题及解决办法 - **索引越界**:若 `valid_index` 或者 `test__index` 超出了 `cv_set` 的范围,就会引发 `IndexError`。解决办法是在使用之前,检查索引是否合法。 - **数据维度不匹配**:若 `x_test` 和 `y_test` 的长度不一致,可能会造成数据不匹配的问题。解决办法是在划分数据之前,确保 `x_test` 和 `y_test` 的长度相同。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值