赞
踩
以下问题以Q&A形式记录,基本上都是笔者在初学一轮后,掌握不牢或者频繁忘记的点
Q&A的形式有助于学习过程中时刻关注自己的输入与输出关系,也适合做查漏补缺和复盘。
本文对读者可以用作自查,答案在后面,需要时自行对照。
数据集
Q1:什么是结构化数据与非结构化数据?二者有什么不同的处理方式?
Q2:对于一个数据集dataset,什么是feature?如果数据集是非结构化数据,他的特征(feature)的格式大致是什么?
Q3:回归任务(regression)的主要目标是什么?
Q4:逻辑回归是什么?逻辑回归的特性?(回归中有线性回归和多项式回归,这些和逻辑回归有什么关系?)
机器学习的分类
Q5:分类和回归都属于监督学习,这个说法正确吗?
Q6:数据的降维,从特征视角看是做了什么工作?降维和数据可视化属于什么学习?
Q7:数据降维有哪几种方法?
Q8:未来ai的重要问题:模型可信,小样本,推理而不是判断(缺乏抽象思维和逻辑推理)
下图四大工具的主要内容是否已经熟知?
Q9:jupyter的用法和魔法命令?
Q10:在jupyter中,%%whos %%lsmagic 是做什么的?
Q11: 对于以下代码,其输出的结果是什么?
x = [i for i in range(10)]
Q12:创建数组有两种方法:range 和 np.arange,二者显著的区别是什么?
Q13:在numpy中random.seed设置之后,执行的代码行数不同为什么有不同结果?
数组切片
Q14:numpy中,a[:] ,以及 a[::2] 代表什么?( 思考:a[x:y:z] )
Q15:对numpy的数组a,制造一个切片 a[1:3],并且对这个切片内容进行修改,a会发生改变吗?原生数组呢?
Q16:如果数组切片会改变,那么有效的处理方式是什么?(我就想要一个“不会改变的”切片之后的array,该怎么做?)
Q17:numpy中的均值?标准差?方差?
Q18:numpy中,如果想知道一个x[1000000]数组中,min值所在的数组下标,该怎么做?
Q19:如何合并和拆分数组?除了hstack和vstack?(最为原始的是哪一个?对应的拆分?)
Q20:用vstack和vsplit??
Q21:如何将 a[2,3] 这个数组的最后一列split开?(注意使用“最后一列”方法切片,而不是切“第3列”)
Q22:已知A=[1,2,3,4] ,如何获得 A2 = [1x2, 2x2, 3x2, 4x2]
Q23:神奇索引怎么使用?如何结合布尔数组使用?
Q24:numpy中,假设x是一个数组,那么 x[x>3] 是什么语法含义?
Q25:arg是用来干什么的?
Q26:np.all 和 np.any 是干什么的?
Q27:np.count_nonzero(x[x==3])
数据集
A1:结构化数据可以是“鸢尾花→A参数:x,B参数y,....”,
非结构化数据可以是图片文字等参数与值一一对应的数据,其处理方式有:
1)映射成结构化特征 2)直接进行处理
A2:在机器学习和数据分析领域,数据集(dataset)通常由多个数据点组成,每个数据点可以是一条记录或一个实例。而特征(feature)则是指数据集中每个数据点的属性或测量值。特征可以是连续的数值,也可以是离散的类别。
例如,如果我们有一个数据集是关于不同汽车的信息,那么可能的特征包括:
对于非结构化数据,例如图像一类的非结构化数据的feature可以是像素,我们也可以把一个32x32的像素集合当成一个特征向量。
A3:量化xx是xx的概率。
A4:一种可解释性强,可并行的二分类任务,业界工程化中很受欢迎。不过他的 f() 与二分类有所不同,这部分深挖起来细节很多
机器学习的分类
A5: √,监督学习的关键特点在于训练数据包含输入特征及其对应的标签或结果。
A6:无监督学习。数据的降维实际上是将多个特征合并成一个
A7:在众多数据降维方法中,以下是最新或最著名的四种降维技术:
A8:--
A9:jupyter
A10: %whos 用来调试
%lsmagic 用来列出所有的魔法命令
x = [i for i in range(10)]
A11:
1) x = [ i for i in range(10) ]
特别注意!输出的是数组 [0,1,...,9 ], 而不是10。python的range采用了左闭右开的设计规则!
2)如果在调用 random.seed() 之后,执行了其他未指定随机种子的操作,这些操作可能会影响随机数生成器的状态,从而导致不同的结果。
A12:range的方式不限定数组元素类型,处理起来较慢,输出也是体量较大的多功能数组类型。
np.arange 的底层是 np.array ,更面向数学,处理速度快很多,像是向量和矩阵的概念。
A13:一般是意外情况。如果你在代码的不同位置设置了不同的种子值,或者在某些地方没有设置种子,那么随机数生成器的起始点将会不同,从而导致生成的随机数序列也不同。一个典型例子:如果在代码的不同部分多次调用了 random.seed 并且使用了不同的值,每次设置都会改变随机数生成器的状态,导致后续生成的随机数序列不同。
数组切片
A14:numpy中,a[:] 代表整个a(切了没?如切!) a[::2] 代表隔一个取一个。
实际上 a[x:y:z] 是一个切片的完全体格式,代表着 切x~y,从x开始,每次增加z个偏移量的下标取数组元素
A15:numpy中对数组的切片进行修改,则矩阵会被修改,而py不会。原因是为了效率考虑,设计时使用了引用。
A16:x = a[1:8].copy()
A17:平均值mean,方差std,标准差var。使用起来大概是这样:a.std()
A18:
A19:合并数组:c = np.concatenate( (a,b),axis=0 )
# 数组的合并 a = np.arange(10).reshape(2,5) b = np.full_like(a,1) print("a = \n",a,"\n","b = \n",b) # c = np.concatenate(a,b) c = np.concatenate((a,b)) # 这种就是以行的形式接上去了,默认是这样 print("concatenated c(axis=0) = \n",c) c = np.concatenate((a,b),axis = 1) # axis 可以指定合并哪个维度 print("concatenated c(axis=1) = \n",c)
输出结果:
对应的拆分:
x,y = np.split(c,2,axis=0) print(x," ",y) x,y = np.split(c,2,axis=1) x,y
A20:
# np.split? c1,c2 = np.vstack((a,b)), np.hstack((a,b)) x1,x2 = np.vsplit(c1,2) x1,x2 = np.hsplit(c2,2) x1,x2
A21:
a,b = np.split(c1, [-1] ,axis=1) # [-1] 代表最后一行/列,axis=1 代表列
b
A22: numpy中,直接用 A*2 就可以。
但是注意,这个特性只有numpy有,对于py原生是不可以用的,这种情况写的就会比较麻烦:
A23:以二维数组为例,以下代码访问的分别是:D[1,2] , D[1,2], D[1,3]
D[ np.array([1,1,1]), np.array([2,2,3]) ]
或者
D[ [1,1,1],[2,2,2] ]
另外还有:
col = [1,3]
B[0,col] # 第0行,第col=[1,3]两列
B[1,1:3] # 第0行,第col=[1~3]列
A24:x[x>3] 运用了 x>3 这一个比较索引,生成了一个 shape上等同于x的布尔索引数组
布尔索引和神奇索引连用就会产生这种效果。我们可以让任意表达式变成索引!不过一定要记得是 ndarray 才可以
A25:arg主要用来返回地址,what is the index。使用了argxxx的函数最终返回的就是下标而非数据。
A26:
A27:统计x[x=3]数组中非0元素的个数 → x中 =3 的元素个数
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。