目录
1. 数据挖掘基础
Day01
- 代码题
绘制北京、上海两地11点到12点每分钟的温度变化状况。
答:
# 画出温度变化图
import random
# 准备x, y坐标的数据
x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]
# 增加北京的温度数据
y_beijing = [random.uniform(1, 3) for i in x]
# 1)创建画布
plt.figure(figsize=(20, 8), dpi=80)
# 2)绘制折线图
# plt.plot(x, y_shanghai)
plt.plot(x, y_shanghai, label="上海")
# 使用多次plot可以画多个折线
plt.plot(x, y_beijing, color='r', linestyle='--', label="北京")
# 显示图例
plt.legend(loc="best")
# 增加以下两行代码
# 构造x轴刻度标签
x_ticks_label = ["11点{}分".format(i) for i in x]
# 构造y轴刻度
y_ticks = range(40)
# 修改x,y轴坐标的刻度显示
plt.xticks(x[::5], x_ticks_label[::5])
plt.yticks(y_ticks[::5])
# 添加网格显示
plt.grid(True, linestyle='--', alpha=0.5)
# 添加x轴、y轴描述信息及标题
plt.xlabel("时间")
plt.ylabel("温度")
plt.title("中午11点0分到12点之间的温度变化图示")
# 3)显示图像
plt.show()
Day02
- 简答题
下面两个ndarray是否能够进行运算?
arr1 = np.array([[1, 2, 3, 2, 1, 4], [5, 6, 1, 2, 3, 1]])
arr2 = np.array([[1], [3]])
答:
可以,因为符合广播机制。
Day03
- 简答题
用Pandas筛选符合条件的数据的方法有哪些?
答:
data[(data['p_change'] > 2) & (data['open'] > 15)]
data.query("p_change > 2 & turnover > 15")
Day04
- 简答题
请简述Pandas处理缺失值的思路。
答:如何处理np.nan
1)判断数据中是否存在NaN缺失值
pd.isnull(df)
pd.notnull(df)
2) 两种方法:
1、删除含有缺失值的样本
df.dropna(axis=0, inplace=False)
2、替换/插补
sr.fillna(value, inplace=False)
如何处理其他默认标记的缺失值
1)将默认标记转换成np.nan
2)处理np.nan缺失值的思路
Day05
- 代码题
根据给定日线数据绘制日K线图。
答:
import pandas as pd
from mpl_finance import candlestick_ochl
import matplotlib.pyplot as plt
from matplotlib.pylab import date2num
# 数据读取
stock_day = pd.read_csv("./stock_day/stock_day.csv")
# 按时间顺序排列数据
stock_day = stock_day.sort_index()
# 准备ax
fig, axes = plt.subplots(nrows=1, ncols=1, figsize=(13, 8), dpi=100)
# 准备quotes
# 处理time字段
# 将时间索引类型转换成Pandas默认的类型
stock_day.index = pd.to_datetime(stock_day.index)
# 将时间转换成日K线绘制要求的浮点型
stock_day['time'] = date2num(stock_day.index)
# 索引sequence
day_k = stock_day[['time', 'open', 'close', 'high', 'low']]
# 绘制k线图
candlestick_ochl(axes, day_k.values[:30], width=0.4, colorup='r', colordown='g')
# x刻度设置为日期
axes.xaxis_date()
# 添加网格
plt.grid(linestyle="--", alpha=0.5)
# 显示图像
plt.show()
Day06
- 简答题
简述双均线策略。
答:
预设两条均线一条长均线、一条短均线。比如一个ma=5,一个ma=60, 5的均线被称作快线,60的均线被称作慢线。
买入策略中当快线上穿慢线(ma5上穿ma60)称为形成金叉买点信号,买入股票。
卖出策略中当快线下穿慢线(ma5下穿ma60)称为形成死叉卖点信号,卖出股票。
2. 机器学习
Day07
深度学习是机器学习的一个子领域,它关心的是参照神经学科的理论构建神经网络,使用反向传播对大量未标注或半结构化的数据进行建模。从这个角度看,深度学习可以看成一种非监督学习算法,通过使用神经网络学习数据的表示。
监督学习需要具有标签(label)的训练数据,比如做分类,你需要先对训练数据做标记,然后才能训练模型将数据分成你说需要的标记类。
而非监督学习则不需要。
分类会产生离散的数值,使得数据严格的分为不同类。回归会得到连续的值,使你更好的区分独立点之间的区别。当你需要知道你的数据明确的属于那些类时你可以用分类。
1 抽象成数学问题
明确问题是进行机器学习的第一步。指的我们明确我们可以获得什么样的数据,目标是一个分类还是回归或者是聚类的问题,如果都不是的话,如果划归为其中的某类问题。
2 获取数据
数据决定了机器学习结果的上限,而算法只是尽可能逼近这个上限。数据要有代表性,否则必然会过拟合。
而且对于分类问题,数据偏斜不能过于严重,不同类别的数据数量不要有数个数量级的差距。
而且还要对数据的量级有一个评估,多少个样本,多少个特征,可以估算出其对内存的消耗程度,判断训练过程中内存是否能够放得下。如果放不下就得考虑改进算法或者使用一些降维的技巧了。如果数据量实在太大,那就要考虑分布式了。
3 特征预处理与特征选择
特征预处理、数据清洗是很关键的步骤,往往能够使得算法的效果和性能得到显著提高。归一化、离散化、因子化、缺失值处理、去除共线性等,数据挖掘过程中很多时间就花在它们上面。这些工作简单可复制,收益稳定可预期,是机器学习的基础必备步骤。
筛选出显著特征、摒弃非显著特征,需要机器学习工程师反复理解业务。这对很多结果有决定性的影响。特征选择好了,非常简单的算法也能得出良好、稳定的结果。这需要运用特征有效性分析的相关技术,如相关系数、卡方检验、平均互信息、条件熵、后验概率、逻辑回归权重等方法。
4 训练模型与调优
直到这一步才用到我们上面说的算法进行训练。现在很多算法都能够封装成黑盒供人使用。但是真正考验水平的是调整这些算法的(超)参数,使得结果变得更加优良。这需要我们对算法的原理有深入的理解。理解越深入,就越能发现问题的症结,提出良好的调优方案。
5 模型诊断
过拟合、欠拟合 判断是模型诊断中至关重要的一步。常见的方法如交叉验证,绘制学习曲线等。过拟合的基本调优思路是增加数据量,降低模型复杂度。欠拟合的基本调优思路是提高特征数量和质量,增加模型复杂度。
误差分析 也是机器学习至关重要的步骤。通过观察误差样本,全面分析误差产生误差的原因:是参数的问题还是算法选择的问题,是特征的问题还是数据本身的问题……
诊断后的模型需要进行调优,调优后的新模型需要重新进行诊断,这是一个反复迭代不断逼近的过程,需要不断地尝试, 进而达到最优状态。
6 模型融合
一般来说,模型融合后都能使得效果有一定提升。而且效果很好。
工程上,主要提升算法准确度的方法是分别在模型的前端(特征清洗和预处理,不同的采样模式)与后端(模型融合)上下功夫。因为他们比较标准可复制,效果比较稳定。而直接调参的工作不会很多,毕竟大量数据训练起来太慢了,而且效果难以保证。
7 上线运行
这一部分内容主要跟工程实现的相关性比较大。工程上是结果导向,模型在线上运行的效果直接决定模型的成败。 不单纯包括其准确程度、误差等情况,还包括其运行的速度(时间复杂度)、资源消耗程度(空间复杂度)、稳定性是否可接受。
TF指Term frequecy,代表词频,IDF代表inverse document frequency