《计算金融与Python实践》习题及答案 第7-11章 数据分析Numpy类库 -金融数据分析案例_第1页
《计算金融与Python实践》习题及答案 第7-11章 数据分析Numpy类库 -金融数据分析案例_第2页
《计算金融与Python实践》习题及答案 第7-11章 数据分析Numpy类库 -金融数据分析案例_第3页
《计算金融与Python实践》习题及答案 第7-11章 数据分析Numpy类库 -金融数据分析案例_第4页
《计算金融与Python实践》习题及答案 第7-11章 数据分析Numpy类库 -金融数据分析案例_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第七章数据分析Numpy类库练习题一、选择题(每题只有一个正确答案)以下关于NumPy多维数组(ndarray)的描述,正确的是()。

A.ndarray中的数据类型可以不一致

B.ndarray的数据存储在连续的内存空间中

C.ndarray的每个成员可以是任意Python对象

D.ndarray的维度(ndim)属性返回的是数组中元素的总个数答案:B以下哪个函数可以生成一个形状为(3,4)的随机数组,元素服从标准正态分布?()

A.np.random.rand(3,4)

B.np.random.randn(3,4)

C.np.random.randint(0,10,size=(3,4))

D.np.random.uniform(0,1,(3,4))答案:B对于形状为(2,3,4)的三维数组,其shape属性返回的结果是()。

A.2

B.(2,3,4)

C.24

D.(2,3,4,1)答案:B以下代码的运行结果是()。pythonimportnumpyasnpa=np.array([1,2,3,4])b=a.reshape(2,2)b[0,0]=99print(a)A.[1234]

B.[99234]

C.[[992][34]]

D.报错答案:B

(reshape返回的是视图,修改b会影响原数组a)关于NumPy的广播机制,以下说法正确的是()。

A.广播只能在形状完全相同的数组之间进行

B.广播时,维度小的数组会在左侧补1,然后从后向前对齐

C.广播时,对应维度长度必须相等或其中一个为1

D.广播会改变原数组的数据答案:C以下哪个函数用于查找数组中满足条件的元素索引?()

A.np.where()

B.np.argmax()

C.np.searchsorted()

D.np.extract()答案:A对于二维数组a,以下哪个操作可以获得a的第一列?()

A.a[0,:]

B.a[:,0]

C.a[0,0]

D.a[:,0:1]答案:B以下关于np.random.RandomState的说明,正确的是()。

A.它是全局随机数生成器

B.它用于生成一个局部随机数生成器,可以独立控制种子

C.它不能设置种子

D.它生成的随机数与np.random.seed无关答案:B以下代码的输出结果是()。pythonimportnumpyasnpa=np.array([1,2,3,4])b=np.array([10,20,30,40])print(np.dot(a,b))A.[104090160]

B.300

C.100

D.[123410203040]答案:B

(点积:1×10+2×20+3×30+4×40=300)以下哪个函数可以将多维数组展平为一维,并返回原数组的视图?()

A.flatten()

B.ravel()

C.reshape(-1)

D.reshape(1,-1)答案:B

(ravel返回视图,flatten返回副本)二、判断题(正确打“√”,错误打“×”)NumPy数组的dtype属性决定了数组中元素的类型,且所有元素类型必须相同。(√)np.arange(0,10,0.5)可以生成从0到9.5步长为0.5的浮点数数组。(√)对于二维数组,使用单个整数索引如a[2]会返回该行的数据,其维度比原数组少一维。(√)使用花式索引(整数数组索引)返回的数组是原数组的一个视图。(×)解析:花式索引返回的是原数组的副本,不是视图。两个形状不同的数组进行算术运算时,如果满足广播条件,NumPy会自动复制数据使形状一致。(√)np.eye(3)函数可以生成一个3×3的单位矩阵。(√)np.sqrt()是通用函数,可以对数组中的每个元素计算平方根。(√)使用np.loadtxt()读取文件时,默认会将数据转换为整数类型。(×)解析:默认转换为float类型。np.random.shuffle()可以随机打乱多维数组所有维度的顺序。(×)解析:shuffle只改变第一维的顺序,子维内容不变。数组的切片操作返回的是原数组的视图,因此对切片的修改会影响原数组。(√)三、简答题简述NumPy多维数组(ndarray)的主要属性及其含义。参考答案:ndarray的主要属性包括:(1)ndim:数组的维度(轴)个数;(2)shape:数组的维度,由各维度上数组大小构成的元组;(3)size:数组中总的成员个数,等于shape中各维度大小的乘积;(4)dtype:数组成员类型描述对象;(5)itemsize:每个成员占用的字节大小;(6)data:数组数据存储区的缓冲区对象。如何创建NumPy数组?请列举至少五种方法。参考答案:(1)从Python列表或元组转换:np.array([1,2,3]);(2)使用np.arange(start,stop,step)生成一维数组;(3)使用np.linspace(start,stop,num)生成等间隔数组;(4)使用np.zeros(shape)、np.ones(shape)、np.eye(N)生成特殊数组;(5)使用np.random模块中的函数生成随机数组,如np.random.randn()、np.random.randint()等。什么是数组的广播机制?广播的条件是什么?参考答案:广播是指当两个形状不同的数组进行运算时,NumPy通过复制数据使形状一致,从而进行逐元素运算的机制。广播的条件是:(1)从后向前对齐维度,缺失维度补1;(2)对应维度要么相等,要么其中一个为1。满足条件时,维度为1的轴会被复制扩展以匹配另一个数组。NumPy中flatten()和ravel()方法有什么区别?参考答案:两者都将多维数组转换为一维数组。区别在于:ravel()返回的是原数组的视图(view),修改返回的数组会影响原数组;flatten()返回的是原数组的副本(copy),修改返回的数组不影响原数组。在性能上,ravel()通常更快且占用内存更少。如何对多维数组进行切片操作?请举例说明。参考答案:多维数组的切片使用逗号分隔每个维度的切片表达式,格式为[start:stop:step,...]。例如,对于三维数组arr,arr[1:3,:,::2]表示取第1维索引1到2的行,第2维全部,第3维步长为2。省略的维度表示全部选取,连续省略可以用...代替。切片返回的是原数组的视图。什么是花式索引?它与切片索引有何不同?参考答案:花式索引是指使用整数数组作为索引来选择数组中特定位置的元素。例如,arr[[0,2,3],[1,0,2]]会选择(0,1)、(2,0)、(3,2)位置的元素。与切片不同,花式索引返回的是原数组的副本,且可以按任意顺序选取不连续的位置。简述NumPy通用函数(ufunc)的特点,并举例说明其应用。参考答案:通用函数是对ndarray进行逐元素操作的函数,具有向量化运算、速度快、代码简洁的特点。它们分为一元函数(如np.sqrt、np.exp、np.sin)和二元函数(如np.add、np.maximum)。使用通用函数可以避免显式循环,提高计算效率。如何使用NumPy生成符合正态分布的随机数?请写出代码。参考答案:可以使用np.random.normal(loc,scale,size)生成指定均值和标准差的正态分布随机数。例如,生成100个均值为0、标准差为1的随机数:np.random.normal(0,1,100)。也可以使用np.random.randn(size)生成标准正态分布随机数。解释NumPy数组的shape属性与reshape方法的关系。参考答案:shape属性是数组的一个属性,表示数组各维度的大小,可以读取或直接修改(只要元素总数不变)。reshape()是数组的方法,返回一个具有新形状的数组视图(如果可能),不改变原数组的数据。两者都要求新形状的元素总数与原数组相同。如何使用NumPy进行矩阵乘法?请写出两种方法。参考答案:对于二维数组表示的矩阵,可以使用以下方法进行矩阵乘法:(1)np.dot(A,B)或A.dot(B);(2)使用@运算符:A@B;(3)对于高维数组,可以使用np.matmul(A,B)。注意,点积要求第一个矩阵的列数等于第二个矩阵的行数。第八章数据分析Pandas类库练习题一、选择题(每题只有一个正确答案)以下关于Pandas中Series和DataFrame的描述,正确的是()。

A.Series是一维数据结构,DataFrame是二维数据结构

B.Series和DataFrame都是可变数据类型

C.DataFrame的每一列是一个独立的Series,且列索引可以重复

D.Series只有行索引,没有列索引答案:A以下哪个方法可以查看DataFrame的统计汇总信息(包括计数、均值、标准差等)?()

A.

()

B.df.head()

C.df.describe()

D.df.shape答案:C在Pandas中,使用df.loc['index1':'index3']进行切片时,结果包含()。

A.只包含index1

B.包含index1和index3,但不包含中间的行

C.包含index1到index3的所有行,区间左闭右闭

D.包含index1到index3的所有行,区间左闭右开答案:C

(标签索引切片包含两端)以下哪个函数用于处理缺失值,可以用指定的值填充缺失值?()

A.df.dropna()

B.df.isnull()

C.df.fillna()

D.df.drop_duplicates()答案:C关于Pandas的groupby操作,以下说法正确的是()。

A.groupby返回的是一个DataFrame对象

B.groupby返回的是一个GroupBy对象,需要配合聚合函数使用

C.groupby只能按照单列分组

D.groupby操作不能与agg方法配合使用答案:B以下代码的输出结果是()。pythonimportpandasaspds=pd.Series([1,2,3,4],index=['a','b','c','d'])print(s.iloc[2])A.3

B.'c'

C.2

D.报错答案:A

(iloc使用位置索引,位置2对应第三个元素,值为3)以下哪个方法用于将多个DataFrame按行方向(垂直)合并?()

A.pd.merge()

B.df.join()

C.pd.concat(axis=0)

D.pd.concat(axis=1)答案:C关于时间序列的重采样(resample),以下说法正确的是()。

A.重采样只能从高频率降到低频率

B.重采样只能从低频率升到高频率

C.降采样时需要指定聚合函数

D.升采样时缺失值无法填充答案:C以下哪个方法用于删除DataFrame中包含缺失值的行?()

A.df.fillna()

B.df.dropna()

C.df.isna()

D.df.drop_duplicates()答案:B关于Pandas的透视表函数pivot_table,以下说法正确的是()。

A.pivot_table只能使用均值作为聚合函数

B.pivot_table不能处理重复的索引值

C.pivot_table可以指定行索引、列索引和聚合列

D.pivot_table返回的是DataFrame,不能设置缺失值填充答案:C二、判断题(正确打“√”,错误打“×”)Pandas的DataFrame可以看作是一个有序的字典,键是列索引,值是Series。(√)使用df.iloc[0:3]切片时,包含索引为0、1、2的行,不包含索引为3的行。(√)df.fillna(method='ffill')可以使用缺失值后面的值向前填充缺失值。(×)解析:method='ffill'或'pad'是向前填充(用前一个值填充),'bfill'或'backfill'是向后填充。groupby操作后使用agg()方法可以同时应用多个聚合函数。(√)pd.merge()只能按照行索引进行合并,不能按照列进行合并。(×)解析:pd.merge()可以指定on、left_on、right_on等参数按照列进行合并。DataFrame的apply()方法可以对每一行或每一列应用一个函数。(√)reset_index()方法会将原索引重置为默认的整数索引,并将原索引作为新的一列保留。(√)时间序列的resample方法进行升采样时,必须指定聚合函数。(×)解析:升采样时,通常需要填充缺失值,但不一定需要聚合函数(聚合函数用于降采样)。df.groupby('列名').transform()返回的结果与原始数据形状相同。(√)DataFrame的plot()方法可以绘制折线图、条形图、直方图等多种图形。(√)三、简答题简述Pandas中Series和DataFrame的区别与联系。参考答案:Series是一维带标签的数组,可以看作是一个有序的字典,每个数据对应一个行索引。DataFrame是二维带标签的数据结构,可以看作是由多个具有相同行索引的Series组成的表格,既有行索引也有列索引。DataFrame的每一列都是一个Series,因此DataFrame可以看作是一个值为Series的字典,键是列索引。Series和DataFrame都支持标签索引和位置索引。DataFrame中loc和iloc有什么区别?请举例说明。参考答案:loc是基于标签的索引,使用行标签和列标签进行选择;iloc是基于位置的整数索引,使用行号和列号进行选择。例如,df.loc['index1':'index3','col1':'col2']使用标签切片(包含两端),df.iloc[0:3,1:3]使用位置切片(左闭右开)。loc和iloc都支持单个标签、标签列表、切片和布尔数组索引。Pandas中如何处理缺失值?请列举常用的方法。参考答案:常用的缺失值处理方法包括:(1)检查缺失值:df.isnull()、df.isna()返回布尔数组,df.isnull().sum()统计每列缺失值个数;(2)删除缺失值:df.dropna()删除包含缺失值的行或列,可通过axis、how、thresh等参数控制;(3)填充缺失值:df.fillna(value)用指定值填充,可设置method参数进行向前或向后填充,也可用均值、中位数等统计量填充。groupby操作的基本流程是什么?agg()、transform()和apply()方法有什么区别?参考答案:groupby操作分为三个阶段:分组(split)、应用(apply)和合并(combine)。区别如下:(1)agg():对每组应用聚合函数,返回聚合结果,每组输出一行;(2)transform():对每组应用函数,返回与原始数据相同形状的结果,保留原索引;(3)apply():最灵活,可以对每组应用任意函数,返回结果的形状由函数决定,可以返回标量、Series或DataFrame。简述pd.merge()和pd.concat()的区别。参考答案:pd.merge()用于基于一个或多个键(列)进行数据库风格的连接,类似于SQL的JOIN操作,可以指定连接方式(inner、left、right、outer),主要用于列对齐的连接。pd.concat()用于沿一个轴(行或列)进行简单的拼接,不依赖于键值匹配,主要用于按行堆叠或按列合并,当需要基于键值匹配的复杂连接时使用merge,当需要简单拼接时使用concat。时间序列分析中,resample方法的作用是什么?请举例说明。参考答案:resample方法用于时间序列的频率转换和重采样。降采样(从高频率到低频率)时,需要指定聚合函数,如df.resample('M').mean()计算月度均值。升采样(从低频率到高频率)时,需要处理缺失值,可使用fillna或method参数填充。resample常用于将日数据聚合为周、月、季度数据,或将低频数据插值为高频数据。DataFrame中apply()和applymap()方法有什么区别?参考答案:apply()方法作用于DataFrame的行或列,可以接受一个函数,该函数接收一维数组(Series)作为输入,返回标量或Series。常用于对整行或整列进行运算。applymap()方法作用于DataFrame的每个元素,接受一个函数,该函数接收单个值作为输入,返回单个值,常用于对每个元素进行转换操作。如何对DataFrame中的重复行进行处理?参考答案:可以使用df.duplicated()检查重复行,返回布尔数组,表示每一行是否是前面出现过的重复行。使用df.drop_duplicates()删除重复行,可以通过subset参数指定判断重复的列,通过keep参数控制保留哪一行(first、last或False表示全部删除)。这些操作常用于数据清洗阶段。简述Pandas中shift()方法的作用,并举例说明其应用场景。参考答案:shift()方法用于将数据沿指定轴移动指定的步数。移动后,空缺位置用NaN填充。在金融数据分析中,常用于计算收益率(如df['close'].shift(1)获取前一日收盘价,然后计算涨跌幅),或构建滞后特征用于时间序列预测。参数periods指定移动步数,axis指定移动轴(0为行,1为列),fill_value可指定填充值。Pandas的数据可视化功能有哪些优点?plot()方法的kind参数可以指定哪些图形类型?参考答案:Pandas集成了Matplotlib的绘图功能,可以直接通过DataFrame和Series对象的plot()方法快速生成图表,无需显式创建图形和轴对象,使用方便。kind参数可以指定的图形类型包括:'line'(折线图,默认)、'bar'(垂直条形图)、'barh'(水平条形图)、'hist'(直方图)、'box'(箱线图)、'kde'(核密度估计图)、'area'(面积图)、'pie'(饼图)、'scatter'(散点图)、'hexbin'(六边形分箱图)。第九章数据分析Matplotlib.pyplot类库练习题一、选择题(每题只有一个正确答案)在Matplotlib中,以下哪个函数用于创建包含多个子图的画布和轴对象?()

A.plt.figure()

B.plt.subplot()

C.plt.subplots()

D.plt.axes()答案:C以下哪个函数用于在图形中添加图例?()

A.plt.xlabel()

B.plt.title()

C.plt.legend()

D.plt.grid()答案:C关于Matplotlib的中文显示问题,以下哪种设置可以正确显示中文?()

A.plt.rcParams['font.sans-serif']=['SimHei']

B.plt.rcParams['font.family']='TimesNewRoman'

C.plt.rcParams['axes.unicode_minus']=True

D.plt.rcParams['font.size']=12答案:A以下哪个函数用于绘制散点图?()

A.plt.plot()

B.plt.scatter()

C.

plt.bar()

D.plt.hist()答案:B以下代码片段的功能是()。pythonfig,ax=plt.subplots(2,2)A.创建一个包含2行2列共4个子图的图形

B.创建一个包含2行2列共4个独立窗口

C.创建一个图形,其中包含2个子图

D.创建一个包含2个轴的图形答案:A在Matplotlib中,plt.plot(x,y,'r--')中的'r--'表示()。

A.红色实线

B.红色虚线

C.红色点线

D.绿色虚线答案:B

('r'表示红色,'--'表示虚线)以下哪个函数用于设置x轴的刻度标签?()

A.plt.xticks()

B.plt.xlabel()

C.plt.xlim()

D.plt.set_xticklabels()答案:A以下哪个图形适合展示数据的分布情况?()

A.折线图

B.条形图

C.直方图

D.饼图答案:C以下哪个方法可以调整子图之间的间距,防止重叠?()

A.plt.subplot_adjust()

B.plt.tight_layout()

C.plt.auto_layout()

D.plt.grid()答案:B在Matplotlib中,要绘制堆积面积图,应该使用哪个函数?()

A.plt.stackplot()

B.plt.area()

C.plt.fill_between()

D.

plt.bar(stacked=True)答案:A二、判断题(正确打“√”,错误打“×”)Matplotlib默认支持中文显示,无需额外设置。(×)解析:Matplotlib默认字体不支持中文,需要设置中文字体。plt.figure()用于创建一个新的图形窗口。(√)plt.plot()既可以绘制折线图,也可以绘制散点图(通过指定标记符号)。(√)使用plt.subplot(2,3,5)创建的子图位于2行3列网格中的第5个位置(从左到右、从上到下编号)。(√)plt.hist()绘制直方图时,bins参数用于指定数据分组的个数。(√)在Matplotlib中,通过plt.rcParams可以全局设置图形的默认参数。(√)plt.boxplot()绘制箱线图时,可以展示数据的最大值、最小值、中位数和异常值等信息。(√)plt.pie()绘制饼图时,默认显示每个扇区的百分比标签。(×)解析:需要设置autopct参数才会显示百分比。plt.twinx()用于创建一个共享x轴的新的y轴,常用于绘制双y轴图。(√)使用面向对象方式绘图时,需要通过plt.show()来显示图形,而函数式绘图则不需要。(×)解析:无论哪种方式,都需要plt.show()才能显示图形。三、简答题简述Matplotlib图形的主要组成部分有哪些?参考答案:Matplotlib图形的主要组成部分包括:图形(Figure)、坐标系区域(Axes)、图标题(Title)、x轴标签(xlabel)、y轴标签(ylabel)、x轴刻度(xticks)和刻度标签(xticklabels)、y轴刻度(yticks)和刻度标签(yticklabels)、图例(Legend)、网格线(Grid)以及实际绘制的图形元素(如线条、标记等)。Matplotlib中如何设置中文字体以正常显示中文标签?请写出两种方法。参考答案:方法一:在绘图前设置全局字体,plt.rcParams['font.sans-serif']=['SimHei'](黑体)或['SimFang'](宋体),同时设置plt.rcParams['axes.unicode_minus']=False以正常显示负号。方法二:在具体绘图函数中指定fontproperties参数,如plt.xlabel('x轴',fontproperties='SimHei')。plt.subplots()和plt.subplot()有什么区别?参考答案:plt.subplots()用于一次性创建包含多个子图的图形,返回一个Figure对象和一个Axes数组(或单个Axes),适合批量创建和管理子图。plt.subplot()用于在当前图形中添加单个子图,每次调用返回一个Axes对象,适合逐个添加子图。plt.subplots()是更高级的封装,通常用于快速创建网格布局的子图。如何绘制双y轴图形?请简述步骤。参考答案:首先使用plt.subplots()或plt.gca()获取当前Axes对象ax1,用ax1.plot()绘制第一个数据集,设置ax1的y轴标签。然后使用ax2=ax1.twinx()创建一个共享x轴的新Axes对象ax2,用ax2.plot()绘制第二个数据集,设置ax2的y轴标签。最后添加图例、标题等。plt.plot()函数的fmt参数的作用是什么?请举例说明常用的格式符号。参考答案:fmt参数用于快速设置线条的颜色、线型和标记符号,是一个字符串,由颜色、标记、线型三部分组成,顺序任意。例如:'r--'表示红色虚线,'go'表示绿色圆圈标记,'b-.'表示蓝色点划线。常用颜色:b蓝、g绿、r红、c青、m紫红、y黄、k黑、w白;常用线型:-实线、--虚线、-.点划线、:点线;常用标记:o圆圈、s正方形、^上三角、v下三角、*星形、+加号、x叉号。直方图(hist)和条形图(bar)的主要区别是什么?参考答案:直方图用于展示连续型数据的分布,x轴表示数据的分组区间,y轴表示频数或频率,条形之间通常没有间隙。条形图用于展示分类数据的比较,x轴表示不同的类别,y轴表示数值,条形之间有间隙。直方图需要指定bins参数来划分区间,条形图需要指定类别标签。如何在Matplotlib中绘制多子图并共享x轴或y轴?参考答案:使用plt.subplots()创建子图时,可以通过sharex和sharey参数实现轴共享。例如,fig,axes=plt.subplots(2,2,sharex=True,sharey=True)使所有子图共享x轴和y轴。共享轴后,只有最下面一行的子图显示x轴刻度,最左边一列显示y轴刻度。也可以使用ax.sharex(other_ax)等方法在创建后设置。简述面向对象绘图和函数式绘图的主要区别,并说明各自的使用场景。参考答案:函数式绘图(pyplot)直接调用plt.plot()、plt.xlabel()等函数,操作当前图形和轴对象,适合快速绘图和简单场景。面向对象绘图显式创建Figure和Axes对象,然后调用对象的方法进行绘图,适合需要精细控制多个子图、复杂布局、自定义属性的场景。面向对象方式更灵活,推荐在复杂绘图时使用。Matplotlib中如何保存图形到文件?参考答案:使用plt.savefig()函数,在plt.show()之前调用。例如,plt.savefig('figure.png',dpi=300,bbox_inches='tight')将当前图形保存为PNG文件,dpi参数设置分辨率,bbox_inches='tight'可以去除图形周围的多余空白。也可以使用Figure对象的savefig方法。请简述绘制一张完整图形的常用步骤。参考答案:绘制图形的常用步骤:(1)准备数据;(2)创建图形(plt.figure()或plt.subplots());(3)设置中文字体(如需显示中文);(4)绘制图形(如plt.plot());(5)设置标题、轴标签、刻度等;(6)添加图例(plt.legend());(7)显示网格(plt.grid());(8)保存图形(plt.savefig());(9)显示图形(plt.show())。第十章数据分析sklearn机器学习库练习题一、选择题(每题只有一个正确答案)关于Scikit-learn估计器(Estimator)的使用,以下说法正确的是()。

A.fit()方法用于对数据进行转换

B.transform()方法用于训练模型

C.fit()方法用于训练模型,transform()方法用于应用转换

D.fit_transform()等价于先fit()后transform(),且总是比分开调用效率更高答案:C以下哪个类用于数据的标准化(将数据转换为均值为0、方差为1的分布)?()

A.MinMaxScaler

B.StandardScaler

C.Normalizer

D.RobustScaler答案:B对于分类问题,以下哪个指标最适合评估模型在样本不平衡情况下的性能?()

A.准确率(Accuracy)

B.均方误差(MSE)

C.召回率(Recall)

D.R²答案:C以下哪个函数用于将数据集划分为训练集和测试集?()

A.cross_val_score

B.train_test_split

C.GridSearchCV

D.KFold答案:B以下关于逻辑回归(LogisticRegression)的描述,正确的是()。

A.逻辑回归是用于回归问题的线性模型

B.逻辑回归的损失函数是均方误差

C.逻辑回归可以用于二分类问题,也可以用于多分类问题

D.逻辑回归默认使用L1正则化答案:C以下哪个类用于创建多项式特征?()

A.StandardScaler

B.PolynomialFeatures

C.OneHotEncoder

D.PCA答案:B关于随机森林(RandomForest)的描述,正确的是()。

A.随机森林是Boosting集成方法的代表

B.随机森林中的每棵决策树使用全部样本进行训练

C.随机森林通过对特征和样本进行随机采样来降低过拟合风险

D.随机森林只能用于分类问题,不能用于回归答案:C在交叉验证中,以下哪个方法可以用于搜索最优超参数?()

A.cross_val_score

B.GridSearchCV

C.train_test_split

D.learning_curve答案:B以下关于PCA(主成分分析)的说法,正确的是()。

A.PCA是一种有监督的降维方法

B.PCA通过保留方差最大的方向来实现降维

C.PCA要求数据必须标准化

D.PCA可以处理分类变量答案:B以下关于模型评估的说法,正确的是()。

A.ROC曲线下的面积(AUC)越接近0,模型性能越好

B.混淆矩阵只能用于二分类问题

C.均方误差(MSE)是分类模型的评估指标

D.可决系数(R²)越接近1,回归模型拟合效果越好答案:D二、判断题(正确打“√”,错误打“×”)Scikit-learn中的数据集加载函数(如load_iris())返回的数据是字典形式,包含data、target等键。(√)StandardScaler和MinMaxScaler都可以对数据进行标准化处理,但StandardScaler对异常值更敏感。(√)在Scikit-learn中,LabelEncoder可以将分类特征转换为整数编码,且转换后的编码具有大小顺序意义。(×)解析:LabelEncoder转换后的整数编码是任意的,不表示大小顺序。岭回归(Ridge)和Lasso回归都使用L2正则化来防止过拟合。(×)解析:岭回归使用L2正则化,Lasso回归使用L1正则化。决策树模型的max_depth参数越大,模型越容易过拟合。(√)支持向量机(SVM)只能用于分类问题,不能用于回归问题。(×)解析:SVM有SVC(分类)和SVR(回归)两种实现。Bagging集成方法通过并行训练多个基学习器并平均结果来降低模型的方差。(√)网格搜索(GridSearchCV)可以自动调整估计器的超参数,但需要手动指定参数的候选值列表。(√)在回归模型评估中,均方误差(MSE)的值越小,说明模型拟合效果越好。(√)使用joblib.dump()可以将训练好的模型保存到文件中,以便后续使用。(√)三、简答题简述Scikit-learn中估计器(Estimator)的主要方法及其作用。参考答案:Scikit-learn中的估计器主要有三个核心方法:(1)fit():用于训练模型,根据输入数据学习模型参数;(2)predict():用于预测,使用训练好的模型对新数据进行预测;(3)transform():用于数据转换,将输入数据转换为新的特征表示(常用于预处理和降维)。对于同时支持训练和转换的估计器,还有fit_transform()方法,等价于先fit()后transform()。数据预处理中,标准化(Standardization)和归一化(Normalization)有什么区别?参考答案:标准化(Standardization)是将数据转换为均值为0、方差为1的分布,使用StandardScaler,公式为(x-μ)/σ,不受数据范围限制,但受异常值影响较大。归一化(Normalization)是将数据缩放到特定范围(通常是[0,1]),使用MinMaxScaler,公式为(x-min)/(max-min),对数据范围敏感,但能保持原始数据的分布形状。选择哪种方法取决于算法的要求和数据特点。什么是独热编码(One-HotEncoding)?为什么要使用它?参考答案:独热编码是将分类特征转换为二进制向量的方法,每个类别对应一个维度,该维度取值为1,其他维度为0。例如,颜色特征["红","绿","蓝"]编码为[1,0,0]、[0,1,0]、[0,0,1]。使用独热编码的原因是:许多机器学习算法假设特征是数值型的,且类别之间没有顺序关系。整数编码(如1,2,3)会错误地引入大小顺序,而独热编码可以避免这一问题。L1正则化和L2正则化有什么区别?参考答案:L1正则化(Lasso)在损失函数中加入权重的绝对值之和作为惩罚项,倾向于产生稀疏解(部分权重变为0),可用于特征选择。L2正则化(Ridge)在损失函数中加入权重的平方和作为惩罚项,使权重趋近于0但不会为0,可以防止过拟合,提高模型泛化能力。L1正则化适合特征数量多的情况,L2正则化更适合特征之间存在相关性的情况。什么是交叉验证(CrossValidation)?为什么要使用交叉验证?参考答案:交叉验证是一种评估模型泛化能力的统计方法,将数据集划分为k个大小相似的子集,每次用k-1个子集训练模型,用剩下的1个子集验证模型,重复k次,取平均性能作为模型评估结果。常用的有k折交叉验证(k-foldCV)。使用交叉验证可以:(1)更充分地利用有限的数据;(2)减少模型评估的偶然性;(3)防止模型在特定训练集上过拟合;(4)帮助选择最优的模型超参数。简述混淆矩阵(ConfusionMatrix)及其包含的四个基本指标。参考答案:混淆矩阵是评估分类模型性能的表格,行表示真实类别,列表示预测类别。对于二分类问题,包含四个基本指标:TP(真正例):预测为正,实际为正;TN(真负例):预测为负,实际为负;FP(假正例):预测为正,实际为负(第一类错误);FN(假负例):预测为负,实际为正(第二类错误)。基于这四个指标可以计算准确率、精确率、召回率等评价指标。ROC曲线和AUC值的含义是什么?参考答案:ROC曲线(受试者工作特征曲线)是以假正率(FPR)为横轴、真正率(TPR)为纵轴绘制的曲线,反映了分类器在不同阈值下的性能。AUC(曲线下面积)是ROC曲线下的面积,取值范围[0.5,1]。AUC值越接近1,说明分类器的性能越好;AUC=0.5表示随机猜测,无分类能力。AUC不受类别不平衡的影响,是评价分类器整体性能的重要指标。简述Bagging和Boosting两种集成学习方法的区别。参考答案:Bagging(如随机森林)是并行集成方法,基学习器之间独立训练,通过自助采样(bootstrap)生成不同的训练子集,最后通过投票(分类)或平均(回归)组合结果,主要降低模型的方差,减少过拟合。Boosting(如AdaBoost、梯度提升)是串行集成方法,基学习器按顺序训练,每个新学习器重点关注前一个学习器分类错误的样本,最后加权组合结果,主要降低模型的偏差,提高预测精度。网格搜索(GridSearchCV)是如何工作的?它的优缺点是什么?参考答案:网格搜索通过遍历指定的超参数组合,对每组参数使用交叉验证评估模型性能,最终选择性能最优的参数组合。优点:简单直观,能找到给定范围内的最优参数组合;缺点:当参数空间大时,计算量呈指数增长,效率较低。对于连续型超参数,通常需要结合领域知识选择合适的候选值。可以使用RandomizedSearchCV进行随机搜索,在大参数空间下效率更高。模型持久化的常用方法有哪些?为什么要进行模型持久化?参考答案:Scikit-learn中常用的模型持久化方法有两种:(1)使用Python内置的pickle模块,通过pickle.dump()保存模型,pickle.load()加载模型;(2)使用joblib模块,通过joblib.dump()和joblib.load(),对于包含大型NumPy数组的模型效率更高。模型持久化的目的是:训练好的模型可以保存到文件中,避免每次使用都重新训练,提高效率,便于模型部署到生产环境。第十一章金融数据分析案例练习题一、选择题(每题只有一个正确答案)在Python中,以下哪个库可以用于从网易财经等网站获取金融数据?()

A.pandas

B.numpy

C.Tushare

D.matplotlib答案:C关于股票收益率的计算,以下说法正确的是()。

A.简单收益率和对数收益率的计算结果完全相同

B.对数收益率通常用于时间序列分析,因为其具有可加性

C.简单收益率的计算公式为$r_t=\ln(P_t/P_{t-1})$

D.对数收益率总是大于简单收益率答案:B在布莱克-斯科尔斯期权定价模型中,以下哪个变量对期权价格的影响是正向的?()

A.行权价格

B.无风险利率

C.到期时间

D.标的资产波动率答案:D关于二项式期权定价模型,以下说法正确的是()。

A.二项式模型只能对欧式期权定价

B.二项式模型通过构建股票价格二叉树,从后向前递推期权价值

C.二项式模型中,上行乘数u和下行乘数d满足u×d=1

D.当二叉树步数增加时,二项式模型结果与BSM模型结果趋于一致答案:B在投资组合优化中,夏普比率(SharpeRatio)的计算公式是()。

A.(E(Rp)-Rf)/σp

B.(E(Rp)-Rf)/βp

C.E(Rp)/σp

D.(E(Rp)-Rf)×σp答案:A以下哪个方法用于求解有约束的最优化问题(如投资组合优化)?()

A.np.linalg.inv()

B.scipy.optimize.minimize()

C.np.polyfit()

D.pd.optimize()答案:B关于风险价值(VaR)的描述,以下正确的是()。

A.VaR只能衡量市场风险,不能衡量信用风险

B.参数法VaR假设收益率服从正态分布

C.历史模拟法VaR不需要历史数据

D.蒙特卡洛模拟法VaR计算简单,速度快答案:B在KNN股价涨跌预测模型中,以下哪种距离度量方法可以消除变量量纲的影响?()

A.欧氏距离

B.曼哈顿距离

C.标准化欧氏距离

D.切比雪夫距离答案:C关于ARIMA模型,以下说法正确的是()。

A.ARIMA模型要求时间序列必须是平稳的

B.ARIMA模型中的I代表自回归阶数

C.ARIMA模型只能用于预测,不能用于分析

D.ARIMA模型对异常值不敏感答案:A在时间序列分析中,ADF检验用于检验()。

A.序列的自相关性

B.序列的平稳性

C.序列的季节性

D.序列的随机性答案:B二、判断题(正确打“√”,错误打“×”)使用Tushare获取股票数据时,返回的数据格式是pandas的DataFrame。(√)简单收益率和对数收益率都可以用于计算年化收益率,但简单收益率的可加性更好。(×)解析:对数收益率具有可加性,便于多期收益计算。布莱克-斯科尔斯期权定价模型假设标的资产价格服从对数正态分布。(√)在二叉树期权定价模型中,风险中性概率的计算与标的资产的预期收益率无关。(√)投资组合的有效前沿是可行集中所有投资组合的集合。(×)解析:有效前沿是可行集中位于左上边界的投资组合集合,而非全部。使用蒙特卡洛方法计算VaR时,需要假设资产价格服从某种随机过程。(√)KNN模型在预测股价涨跌时,k值的选择对模型性能没有影响。(×)解析:k值的选择对模型性能有显著影响,过小容易过拟合,过大可能欠拟合。在ARIMA模型中,进行一阶差分是为了消除时间序列的平稳性。(×)解析:一阶差分是为了使非平稳序列变为平稳序列。逻辑回归模型可以用于股价涨跌预测,输出结果为涨或跌的概率。(√)使用pmdarima.auto_arima()可以自动寻找最优的ARIMA模型参数。(√)三、简答题简述使用Tushare获取股票历史交易数据的基本步骤。参考答案:(1)安装tushare库:pipinstalltushare;(2)导入tushare模块:importtushareasts;(3)使用ts.get_hist_data()函数获取数据,参数包括股票代码(code)、开始日期(start)、结束日期(end)、数据类型(ktype)等;(4)返回的数据为pandasDataFrame格式,包含开盘价、收盘价、最高价、最低价、成交量等字段。解释简单收益率和对数收益率的区别,并说明为什么在金融分析中常用对数收益率。参考答案:简单收益率计算公式为$R_t=(P_t-P_{t-1})/P_{t-1}$,对数收益率计算公式为$r_t=\ln(P_t/P_{t-1})$。对数收益率的优点包括:(1)具有可加性,多期对数收益率等于各期对数收益率之和;(2)近似服从正态分布,便于统计分析;(3)取值范围为$(-\infty,+\infty)$,避免简单收益率的下界为-1的限制。因此,在时间序列分析和风险管理中更常用对数收益率。布莱克-斯科尔斯期权定价模型(BSM)的五个关键输入变量是什么?它们对期权价格的影响方向如何?参考答案:BSM模型的五个关键输入变量及其对看涨期权价格的影响:(1)标的资产当前价格S:正向影响;(2)行权价格X:负向影响;(3)到期时间T:正向影响;(4)无风险利率r:正向影响;(5)标的资产波动率σ:正向影响。对于看跌期权,S和X的影响方向相反。简述二叉树期权定价模型的基本原理和计算步骤。参考答案:二叉树模型的基本原理是将期权的有效期划分为多个时间步长,每个步长内标的资产价格只能向上或向下变动,构建价格二叉树。计算步骤:(1)确定参数:上行乘数u、下行乘数d、风险中性概率p;(2)构建标的资产价格二叉树;(3)计算到期日节点的期权价值;(4)从后向前递推,计算每个节点的期权价值(欧式期权直接折现,美式期权还需比较提前行权收益);(5)根节点价值即为期权价格。什么是投资组合的有效前沿?如何使用Python实现有效前沿的可视化?参考答案:有效前沿是指在给定风险水平下能够提供最高预期收益的投资组合集合,或在给定收益水平下风险最低的投资组合集合。使用Python实现有效前沿可视化的步骤:(1)计算各资产的预期收益率和协方差矩阵;(2)生成大量随机权重组合,计算每个组合的收益率和波动率;(3)使用matplotlib绘制散点图,x轴为波动率,y轴为收益率;(4)计算最大夏普比率组合,在图中标注;(5)可选:使用优化方法求解有效前沿上的最优组合。参数法、历史模拟法和蒙特卡洛模拟法计算VaR的优缺点分别是什么?参考答案:(1)参数法:优点是计算简单快速,缺点是对收益率分布假设敏感,难以处理厚尾分布;(2)历史模拟法:优点是不需要分布假设,直观易懂,缺点是需要大量历史数据,假设历史会重演;(3)蒙特卡洛模拟法:优点是灵活性高,可以处理复杂资产和路径依赖,缺点是计算量大,计算时间长,依赖于随机过程的假设。在KNN股价涨跌预测模型中,如何选择最优的k值?参考答案:选择最优k值的方法包括:(1)交叉验证:将训练数据划分为多份,对不同k值进行交叉验证,选择平均准确率最高的k值;(2)肘部法则:绘制不同k值对应的错误率曲线,选择错误率下降趋缓的拐点;(3)经验法则:通常选择k为训练样本数的平方根或奇数(避免平局);(4)网格搜索:结合交叉验证,自动搜索最优k值。需要注意k值过小容易过拟合,过大则容易欠拟合。简述ARIMA模型的三个参数p、d、q的含义,以及如何确定这些参数。参考答案:ARIMA模型由三个参数组成:(1)p:自回归阶数,表示使用前p期的值预测当前值;(2)d:差分阶数,表示使序列平稳所需的差分次数;(3)q:移动平均阶数,表示使用前q期的预测误差修正当前值。确定参数的方法:(1)通过ADF检验判断d值;(2)观察ACF和PACF图,截尾位置对应q和p的初步估计;(3)使用pmdarima.auto_arima()自动搜索最优参数;(4)通过AIC、BIC等信息准则比较不同参数组合的模型。在股票价格预测中,如何构建特征矩阵用于机器学习模型?参考答案:构建特征矩阵的步骤:(1)获取历史交易数据,包括收盘价、成交量、换手率等;(2)计算技术指标,如移动平均线、RSI、MACD等;(3)构建滞后特征,使用过去N天的收益率、波动率等作为特征;(4)构建目标变量,如未来一天的涨跌(分类)或收益率(回归);(5)将特征矩阵X的每行对应一个时间点,每列对应一个特征,目标向量y对应预测目标;(6)对特征进行标准化或归一化处理。如何评估股价涨跌预测模型的性能?请列举至少三种评估指标。参考答案:评估分类模型(股价涨跌预测)性能的常用指标包括:(1)准确率(Accuracy):正确预测的比例,但类别不平衡时可能失效;(2)精确率(Precision):预测为涨的样本中实际为涨的比例,衡量预测的准确性;(3)召回率(Recall):实际为涨的样本中被正确预测的比例,衡量对上涨样本的捕捉能力;(4)F1分数:精确率和召回率的调和平均,综合衡量模型性能;(5)AUC值:ROC曲线下的面积,衡量模型区分正负类的能力,不受类别不平衡影响。对于回归预测,常用均方误差(MSE)、平均绝对误差(MAE)、可决系数(R²)等指标。模块一:金融市场投资理论基础(对应方案中教学内容第1部分)简答题简述证券市场的功能以及一级市场和二级市场的区别与联系。参考答案:证券市场是股票、债券等有价证券发行和交易的场所,具有筹资、投资、资本定价和资源配置等功能。一级市场是发行市场,是证券从发行人手中转移到初始投资者手中的过程;二级市场是流通市场,是投资者之间进行证券买卖的场所。一级市场是二级市场的基础,二级市场为一级市场发行的证券提供了流动性,是证券发行成功的重要保障。解释投资组合理论中的“有效前沿”概念。参考答案:有效前沿是指在给定风险水平下,能够提供最高预期收益的投资组合集合;或者是在给定预期收益水平下,风险最低的投资组合集合。它由一系列最优投资组合构成,位于投资可行集的左上方边界,是风险厌恶投资者的最优选择范围。什么是资本资产定价模型(CAPM)中的贝塔系数(β)?它如何衡量风险?参考答案:贝塔系数(β)是衡量单个资产或投资组合相对于整个市场(市场组合)的系统性风险的指标。它反映了资产收益对市场收益变动的敏感程度。β=1,资产风险与市场一致;β>1,资产风险大于市场;β<1,资产风险小于市场。在CAPM中,只有系统风险(β风险)才能获得风险溢价。有效市场假说(EMH)的三个层次是什么?参考答案:弱式有效市场假说认为证券价格已充分反映了历史交易信息(如价格、成交量),技术分析无效。半强式有效市场假说认为证券价格已充分反映了所有公开信息(如公司财报、新闻),基本面分析无效。强式有效市场假说认为证券价格已充分反映了所有信息(包括内幕信息),任何投资者都无法获得超额收益。行为金融理论从哪几个方面对有效市场假说提出了质疑?参考答案:1.投资者非完全理性,存在认知偏差(如过度自信、损失厌恶)。2.投资者的非理性行为并非随机,而是具有系统性,如羊群效应。3.套利存在限制,由于噪声交易者风险、交易成本等因素,理性套利者可能无法纠正价格偏差。简述布莱克-斯科尔斯期权定价模型(BSM)的五个关键输入变量。参考答案:BSM模型用于欧式期权定价,其关键输入变量包括:1.标的资产的当前价格(S);2.期权的行权价格(X);3.距离期权到期日的时间(T);4.无风险利率(r);5.标的资产收益率的波动率(σ)。其中,波动率是最关键且最不确定的变量。解释风险价值(VaR)的含义,并说明计算VaR常用的三种方法。参考答案:VaR是指在一定的持有期和给定的置信水平下,某一金融资产或投资组合可能遭受到的最大潜在损失。常用的计算方法有:1.参数法(正态分布法),假设收益率服从正态分布;2.历史模拟法,基于历史收益数据的分位数进行估计;3.蒙特卡洛模拟法,通过模拟大量未来价格路径来构建收益分布。什么是市场风险中的系统风险和非系统风险?参考答案:系统风险是由宏观经济因素(如利率、通货膨胀、战争)引起的、影响整个市场所有资产的风险,无法通过分散投资消除。非系统风险是由特定公司或行业特有因素(如诉讼、新产品失败)引起的风险,可以通过构建多样化的投资组合来分散或消除。简述资本资产定价模型(CAPM)中证券市场线(SML)和资本市场线(CML)的主要区别。参考答案:CML(资本市场线)描述的是有效投资组合(由无风险资产和市场组合构成)的期望收益与总风险(标准差)之间的关系。SML(证券市场线)描述的是所有资产(包括单个资产和无效组合)的期望收益与系统风险(β系数)之间的关系。CML仅适用于有效组合,而SML适用于所有资产。什么是行为金融学中的“期望理论”?其价值函数有何特点?参考答案:期望理论由卡尼曼和特沃斯基提出,用于描述人们在不确定性下的决策行为,认为人们对损失和收益的感知是不同的。其价值函数的特点是:1.定义在相对于某个参照点的偏离上;2.在收益区域是凹函数(风险规避),在损失区域是凸函数(风险偏好);3.损失区域曲线比收益区域曲线更陡峭,即损失带来的痛苦大于同等收益带来的快乐(损失厌恶)。模块二:Python编程与数据处理基础(对应方案中教学内容第2部分)编程实践题题目:定义一个函数

is_prime(n),判断一个整数

n

是否为质数(素数),如果是返回

True,否则返回

False。并在主程序中调用该函数,打印出1到100之间的所有质数。参考思路:使用循环和分支结构,判断从2到sqrt(n)是否有能整除n的数。题目:给定一个列表

lst=[1,2,3,4,5,6,7,8,9],请使用列表推导式实现以下操作:

a)生成一个包含原列表所有元素平方的新列表。

b)生成一个只包含原列表偶数的平方的新列表。参考代码:pythonlst=[1,2,3,4,5,6,7,8,9]squares=[x**2forxinlst]even_squares=[x**2forxinlstifx%2==0]print(squares)print(even_squares)题目:创建一个形状为(3,4)的NumPy数组,元素为从0到11的整数。然后:

a)提取第二行。

b)提取第三列。

c)提取所有大于5的元素。

d)将数组的形状改为(2,6)。参考代码:pythonimportnumpyasnparr=np.arange(12).reshape(3,4)print(arr[1,:])#a)print(arr[:,2])#b)print(arr[arr>5])#c)arr=arr.reshape(2,6)#d)print(arr)题目:创建一个形状为(3,4)的随机整数数组A(范围0-9)和一个形状为(3,1)的数组B(范围0-4)。请演示NumPy的广播机制,计算A与B的和,并解释广播是如何发生的。参考代码:pythonimportnumpyasnpA=np.random.randint(0,10,size=(3,4))B=np.random.randint(0,5,size=(3,1))C=A+Bprint("A:\n",A)print("B:\n",B)print("A+B:\n",C)解释:B的形状是(3,1),A的形状是(3,4)。NumPy将B在第二个维度(列)上复制4次,使其形状变为(3,4),然后进行逐元素相加。题目:使用Pandas读取一个CSV文件(例如,下载的股票数据),并完成以下数据清洗工作:

a)检查数据是否有缺失值,并用合适的方法(如均值填充或向前填充)处理。

b)检查数据是否有重复行,并进行删除。

c)将某一列(如“日期”)转换为时间戳类型,并设置为索引。参考思路:使用df.isnull().sum()检查缺失值;用df.fillna(method='ffill')或df.fillna(df.mean())填充;用df.drop_duplicates()删除重复行;用pd.to_datetime()转换日期列,并用df.set_index()设置索引。题目:利用Pandas对某只股票的历史数据(包含开盘、收盘、最高、最低价)进行如下分析:

a)计算每日收益率。

b)计算20日均线(收盘价的20日移动平均)。

c)找出所有成交量超过当日5日均量(成交量5日移动平均)的日期。参考思路:使用df['close'].pct_change()计算收益率;使用df['close'].rolling(window=20).mean()计算均线;使用df['volume'].rolling(5).mean()计算5日均量,然后用布尔索引df[df['volume']>ma_5_volume]筛选。题目:创建一个包含学生信息(姓名、数学成绩、英语成绩)的DataFrame。请使用groupby和agg方法,按学生姓名分组,计算每个学生的总分和平均分。参考代码:pythonimportpandasaspddata={'姓名':['张三','李四','张三','李四'],'科目':['数学','数学','英语','英语'],'成绩':[90,85,88,92]}df=pd.DataFrame(data)#透视后分组pivot_df=df.pivot(index='姓名',columns='科目',values='成绩')pivot_df['总分']=pivot_df.sum(axis=1)pivot_df['平均分']=pivot_df[['数学','英语']].mean(axis=1)print(pivot_df)题目:使用Matplotlib绘制一张图表,显示某只股票在过去一段时间内(如2023年)的收盘价走势(折线图)和成交量(柱状图),并添加图表标题、坐标轴标签和图例。成交量需绘制在同一个x轴但不同的y轴刻度上。参考思路:使用plt.subplots()创建一个图形和一个轴对象。使用ax1.plot()绘制收盘价折线图,使用ax1.set_ylabel()设置左侧标签。使用ax2=ax1.twinx()创建共享x轴的右侧轴,用ax2.bar()绘制成交量柱状图,并设置右侧标签和颜色。题目:生成一组符合正态分布的随机数据(例如,均值=100,标准差=15,样本量=1000)。使用Matplotlib绘制该数据的直方图,并叠加其理论概率密度曲线(PDF)。同时,添加标题和网格。参考思路:使用np.random.normal()生成数据。使用plt.hist()绘制直方图,参数density=True使面积和为1。使用scipy.stats.norm获取均值和标准差,计算pdf值,并用plt.plot()绘制曲线。题目:简述NumPy中

reshape()

resize()

方法的主要区别。参考答案:reshape()

方法在不改变数组原始数据的情况下返回一个新的视图(如果可能)或副本,要求新形状的元素总数必须与原数组相同。resize()

方法可以直接修改原数组的形状,如果新形状的元素总数大于原数组,则会重复原数组的元素来填充;如果小于,则会截断原数组。模块三:金融数据分析与机器学习(对应方案中教学内容第3部分)简答题/编程实践题简答题:在进行机器学习建模之前,为什么通常需要对特征数据进行标准化(Standardization)或归一化(Normalization)?请举例说明哪些算法对特征尺度敏感。参考答案:很多机器学习算法的性能依赖于特征的尺度,例如,基于距离的算法(KNN、SVM、K-Means)和基于梯度的算法(线性回归、逻辑回归、神经网络)。如果特征尺度差异很大,尺度大的特征会主导距离计算或模型训练,导致模型性能下降或训练不稳定。标准化和归一化可以消除量纲影响,使所有特征处于同一数量级,从而提升模型性能和收敛速度。编程实践题:使用Scikit-learn的make_classification函数生成一个包含1000个样本、20个特征、2个类别的分类数据集。将数据集划分为训练集和测试集(比例70/30),然后使用逻辑回归模型进行训练,并输出模型在测试集上的准确率。参考代码:pythonfromsklearn.datasetsimportmake_classificationfromsklearn.model_selectionimporttrain_test_splitfromsklearn.linear_modelimportLogisticRegressionfromsklearn.metricsimportaccuracy_scoreX,y=make_classification(n_samples=1000,n_features=20,n_classes=2,random_state=42)X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=42)model=LogisticRegression()model.fit(X_train,y_train)y_pred=model.predict(X_test)print(f"Accuracy:{accuracy_score(y_test,y_pred):.4f}")简答题:解释什么是“过拟合”(Overfitting)?列举至少三种防止过拟合的常见方法。参考答案:过拟合是指模型在训练数据上表现极好,但在未见过的测试数据上表现很差的现象,即模型学习到了训练数据中的噪声和个别特征,而未能学到普遍规律。防止过拟合的方法包括:1.增加训练数据量;2.简化模型(如减少特征、降低树深度、减少神经网络层数);3.使用正则化技术(L1、L2正则化);4.集成学习(如Bagging、随机森林);5.早停法。编程实践题:加载Scikit-learn自带的Iris数据集。使用StandardScaler对特征进行标准化,然后使用PCA(主成分分析)将特征降维到2个主成分。最后,使用Matplotlib绘制降维后数据的散点图,并根据目标变量(鸢尾花类别)使用不同颜色标记。参考代码:pythonfromsklearn.datasetsimportload_irisfromsklearn.preprocessingimportStandardScalerfromsklearn.decompositionimportPCAimportmatplotlib.pyplotaspltiris=load_iris()X,y=iris.data,iris.targetX_scaled=StandardScaler().fit_transform(X)X_pca=PCA(n_components=2).fit_transform(X_scaled)plt.scatter(X_pca[:,0],X_pca[:,1],c=y,cmap='viridis',edgecolor='k')plt.xlabel('PC1')plt.ylabel('PC2')plt.title('PCAofIrisDataset')plt.show()简答题:解释混淆矩阵(ConfusionMatrix)中的TP、TN、FP、FN分别代表什么?并基于此解释精确率(Precision)和召回率(Recall)的计算公式。参考答案:TP(真正例):预测为正,实际为正;TN(真负例):预测为负,实际为负;FP(假正例):预测为正,实际为负;FN(假负例):预测为负,实际为正。精确率=TP/(TP+FP),衡量预测为正的样本中实际为正的比例。召回率=TP/(TP+FN),衡量实际为正的样本中被正确预测的比例。编程实践题:使用Scikit-learn的波士顿房价数据集(load_boston(),已弃用,可用fetch_california_housing()替代),分别使用线性回归和岭回归(Ridge)进行房价预测。通过5折交叉验证比较两种模型的均方误差(MSE),并得出结论。参考思路:导入数据,划分训练集和测试集。分别创建LinearRegression和Ridge模型。使用cross_val_score,scoring='neg_mean_squared_error'进行交叉验证,取平均值的绝对值进行比较。简答题:什么是集成学习?请简要介绍Bagging和Boosting两种集成学习范式的核心思想。参考答案:集成学习通过构建并结合多个学习器来完成学习任务,通常能获得比单一学习器更显著的泛化性能。Bagging(如随机森林)的核心思想是并行训练多个独立的基学习器,然后通过投票(分类)或平均(回归)来组合结果,旨在降低方差。Boosting(如AdaBoost、梯度提升)的核心思想是串行训练基学习器,每个新的学习器都重点关注前一个学习器分类错误的样本,旨在降低偏差。编程实践题:在上一题(第6题)的基础上,使用GridSearchCV对岭回归的alpha参数进行网格搜索,寻找最优的alpha值。并输出最佳参数和最佳模型在测试集上的R²分数。参考思路:定义一个参数网格param_grid={'alpha':[0.1,1.0,10.0,100.0]}。创建一个GridSearchCV对象,传入Ridge模型、参数网格、交叉验证次数(cv=5)和评分指标(scoring='r2')。fit训练后,使用best_params_和best_score_获取最佳参数和分数。最后用最佳模型预测测试集并计算R²。简答题:决策树模型容易过拟合,简述至少两种剪枝(Pruning)策略。参考答案:剪枝是防止决策树过拟合的常用方法。主要策略有:1.

预剪枝:在决策树生长过程中,提前停止树的生长。例如,设定树的最大深度(max_depth)、内部节点再划分所需的最小样本数(min_samples_split)或叶子节点的最小样本数(min_samples_leaf)。2.

后剪枝:先生成一颗完整的树,然后自底向上对非叶子节点进行考察,若将该节点对应的子树替换为叶节点能带来泛化性能的提升(如在验证集上表现更好),则进行剪枝。编程实践题:对“模块一”中关于VaR计算的理论,请编写Python代码实现参数法VaR的计算。输入参数为:投资组合初始价值(W0)、预期收益率(mu)、收益率波动率(sigma)、置信水平(alpha,如0.95)。函数返回VaR值。参考代码:pythonimportscipy.statsasstdefparametric_var(W0,mu,sigma,alpha=0.95):"""计算参数法VaR:paramW0:初始投资额:parammu:预期收益率:paramsigma:预期波动率:paramalpha:置信水平:return:VaR值(正数)"""#计算标准正态分布的分位数z=st.no

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论