机器学习中numpy数组的使用

问题背景:

在学习机器学习算法KNN近邻算法时遇到的一个关于bumpy数组使用的问提


问题描述

创建一个数据集,用二维列表分别创建样本的特征和类别。再将创建好的列表数据转numpy的数组。

(这里为什么要将列表转化为numpy数组呢?可以看一些这篇文章numpy数组和列表的区别https://blog.csdn.net/Star_SDK/article/details/80600673

plt.scatter(x_train[y_train0,0],x_train[y_train0,1],color=‘g’)
plt.scatter(x_train[y_train1,0],x_train[y_train1,1],color=‘r’),

这两行代码的作用是筛选出种类是指定类别那一行的第0/1列,比如x_trian[y_train==0,0] ,这行的含义是筛选出种类是0的那一行的第0列,比如:3.39,3.11,1.34,3.58,2.28(为什么是五个呢,因raw_data_y = [0,0,0,0,0,1,1,1,1,1]前五个是0,所以对应个)

疑问在于为什么y_trian 能与x_trian联合使用呢??????

 raw_data_x = [[3.39,2.33], [3.11,1.78], 
 [1.34,3.36], [3.58,4.67], 
 [2.28,2.86], [7.42,4.69], 
 [5.74,3.53], [9.17,2.51],
 [7.79,3.42],[7.93,0.79]]
raw_data_y = [0,0,0,0,0,1,1,1,1,1]

x_train = np.array(raw_data_x)

y_train = np.array(raw_data_y)

plt.scatter(x_train[y_train==0,0],x_train[y_train==0,1],color='g')
plt.scatter(x_train[y_train==1,0],x_train[y_train==1,1],color='r')

plt.show()

原因分析:

X是一个数组,数组的元素是一个二元组。在解释x_train[y_train==0, 0]之前,首先要明白x_train[:,:]左面:代表的是行范围,右边“:”代表的是列范围,如果是冒号则代表全部。那么无论是“:”,还是指定一个范围(类似于(2,3)),其实本质都是会被翻译成一个true/false的一维一元数组,每个元素都是代表数组对应位置的元素是否要出现。

比如,y_train=([0,0,0,0,0,1,1,1,1,1])表面前5个样本属于0这个类别那么
x_train[y_train0, 0],就表示x_train的哪一行返回即[ture(返回),ture(返回),ture(返回),ture(返回),ture(返回),false(不返回)…],前五行返回,后五行不返回。
x_train[y_train
0,0]中的第二个0的意识是返回这一行那一列,x_train[y_train0,0]表示返回类别是0的所有行的第一列
x_train[y_train
0,1]表示返回类别是0的所有行的第二列
x_train[y_train1,0]表示返回类别是1的所有行的第一列
x_train[y_train
1,0]表示返回类别是1的所有行的第二列
这里看到在python里面行列的处理模式是不一样的,行的取舍是通过一个True/ False数组来实现的,列的取舍确实通过指定了那一列;这个其实从矩阵的角度能够更好的理解。


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值