2.3 课后作业(二)
指导书要求如下:
- 用 Python 实现 F1-score,并自己构建一个简易数据集进行测试。
- 用 Python 中的 for 循环、列表推导式,分别实现计算:1+2+3+...+1000。
- 随机生成一个五列十行的 Dataframe 的数据类型,行列索引自定义,绘制出对应的柱状图、散点图,以及在查询官网学习绘制一个课程未讲解(即除柱状图、饼图、散点图、箱线图以外的图形)的数据分析图形。
2.3.1 F1-score
指导书要求自己构建数据集计算 F1-score,于是考虑做如下模拟:
- 随机生成一个 int 类型的数组,长度为 500,范围 ,假定 为反例, 为正例。
- 现模拟一个二分类器,将 预测为反例, 预测为正例。
- 理论上此二分类器的 F1-score 应为 0.6。
代码如下:
def f1_score() -> float:
"""
计算 F1-score。
随机生成一个 int 类型的数组,长度为 500,范围 [0, 1000],假定 [0, 500) 为反例,[500, 1000] 为正例。
现模拟一个二分类器,将 [0, 300)U(800, 1000] 预测为反例,[300, 800] 预测为正例。
理论上此二分类器的 F1-score 应为 0.6。
:return: F1-score
"""
dataset = numpy.random.randint(low=0, high=1001, size=500)
logger.info(f"随机生成数据集:\n{dataset}")
tp = len([x for x in dataset if 500 <= x <= 800])
logger.info(f"真正例:{tp}")
fp = len([x for x in dataset if 300 <= x < 500])
logger.info(f"假正例:{fp}")
tn = len([x for x in dataset if 0 <= x < 300])
logger.info(f"真反例:{tn}")
fn = len([x for x in dataset if 800 < x <= 1000])
logger.info(f"假反例:{fn}")
result = 2 * tp / (2 * tp + fp + fn)
logger.info(f"F1-score:{result}")
return result
2.3.2 求和
求和太简单了,略。
2.3.3 画图
指导书要求从官网上查一个指导书没讲过的图,并自己构建数据画出来。
官方文档链接:API Reference - pandas 0.23.1 documentation
官网展示了每个图的实例代码及其图例,这里不再赘述。