独家 | 利用深度学习和机器学习预测股票市场(附代码)
来源:AISHWARYA SINGH, 2018年10月25日
翻译:赵雪尧
校对:车前子
本文约8000字,建议阅读15+分钟。
本文介绍了如何运用深度学习法预测股票市场。
简介
预测股市将如何变化历来是最困难的事情之一。这个预测行为中包含着如此之多的因素—包括物理或心理因素、理性或者不理性行为因素等等。所有这些因素结合在一起,使得股价波动剧烈,很难准确预测。
使用机器学习可能改变游戏规则吗?机器学习技术使用最新的组织公告、季度收益等作为特征,有潜力挖掘出我们以前没有见过的模式和见解,并可用于准确无误的预测。
在本文中,我们将研究上市公司股价的历史数据。我们将结合机器学习算法来预测这家公司的未来股价,从平均和线性回归这样的简单算法开始,然后转向像Auto ARIMA和LSTM这样的高级模型。
本文背后的核心思想是展示这些算法是如何实现的,因此我只会简单描述该技术并提供相关参考链接,以便在必要时对这些概念进行复习。如果您是时间序列领域的新手,我建议您先阅读以下文章:
创建时间序列预测的初学者综合指南
时间序列建模的完整教程
目录
1、 问题理解
2、 移动平均
3、 线性回归
4、 K-近邻
5、 自动ARIMA
6、 先知(Prophet)
7、 长短时记忆网络(LSTM)
1、问题理解
我们将很快深入本文的实现部分,但首先重要的是确定我们要解决的问题。一般来说,股票市场分析分为两个部分——基本面分析和技术分析。
基本面分析是根据公司目前的经营环境和财务状况,对公司未来的盈利能力进行分析。
技术分析包括阅读图表和使用统计数字来确定股票市场的趋势。
您可能已经猜到,我们的重点将放在技术分析部分。我们将使用来自Quandl的数据集(您可以在这里找到各种股票的历史数据),这个项目中,我使用了“塔塔全球饮料”的数据。是时候开始了!
首先让我们加载数据集,定义问题的目标变量:
#import packages
import pandas as pd
import numpy as np
#to plot within notebook
import matplotlib.pyplot as plt
%matplotlib inline
#setting figure size
from matplotlib.pylab import rcParams
rcParams['figure.figsize'] = 20,10
#for normalizing data
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler(feature_range=(0, 1))
#read the file
df = pd.read_csv('NSE-TATAGLOBAL(1).csv')
#print the head
df.head()
数据集中有多个变量——日期(date)、开盘价(open)、最高价(high)、最低价(low)、最后交易价(last)、收盘价(close)、总交易额(total_trade_quantity)和营业额(turnover)。
开盘价和收盘价代表股票在某一天交易的起始价和最终价。
最高价、最低价和最后交易价表示当天股票的最高价、最低价和最后交易价格。
交易总量是指当天买卖的股票数量,而营业额(Lacs)是指某一特定公司在某一特定日期的营业额。
要注意的另一点是,市场在周末和公共假期休市。注意上表缺失了一些日期值——2/10/2018、6/10/2018、7/10/2018。其中2号是国庆节,6号和7号是周末。
损益的计算通常由股票当日的收盘价决定,因此我们将收盘价作为目标变量。让我们画出目标变量来理解它在我们的数据集中的分布:
#setting index as date
df['Date'] = pd.to_datetime(df.Date,format='%Y-%m-%d')
df.index = df['Date']
#plot
plt.figure(figsize=(16,8))
plt.plot(df['Close'], label='Close Price history')
在接下来的部分中,我们将探索这些变量,并使用不同的技术来预测股票的每日收盘价。
2、移动平均
简介
“平均数”是我们日常生活中最常用的统计量之一。例如,计算平均分数来确定整体表现,或者根据过去几天的平均温度来了解今天的温度——这些都是我们经常做的日常工作。因此,使用这个方法开始用数据集进行预测是个不错的选择。
我们利用一组先前观测值的平均值作为每天的预期收盘价。我们将使用移动平均法,而不是使用简单的平均值,移动平均法使用最近的一组数据计算预测值。换句话说,对于后续的每个新的时间,在考虑预测值时,将从集合中删除最早的观测值,并加入上一个观测值。下面是一个简单的图,它将帮助您更清楚地理解这一点。
我们将在数据集上使用这种技术。第一步是创建一个只包含日期和收盘价列的数据框,然后将其拆分为训练集和验证集来验证我们的预测。
实现
#creating dataframe with date and the target variable
data = df.sort_index(ascending=True, axis=0)
new_data = pd.DataFrame(index=range(0,len(df)),columns=['Date', 'Close'])
for i in range(0,len(data)):
new_data['Date'][i] = data['Date'][i]
new_data['Close'][i] = data['Close'][i]
在将数据分割为训练和验证时,我们不能使用随机分割,因为这会破坏时间顺序。所以这里我将去年的数据作为验证集,将之前4年的数据作为训练集。
#splitting into train and validation
train = new_data[:987]
valid = new_data[987:]
new_data.shape, train.shape, valid.shape
((1235, 2), (987, 2), (248, 2))
train['Date'].min(), train['Date'].max(), valid['Date'].min(), valid['Date'].max()
(Timestamp('2013-10-08 00:00:00'),
Timestamp('2017-10-06 00:00:00'),
Timestamp('2017-10-09 00:00:00'),
Timestamp('2018-10-08 00:00:00'))
下一步是为验证集创建预测值,并使用真实值来检查RMSE误差。
#make predictions
preds = []
for i in range(0,248):
a = train['Close'][len(train)-248+i:].sum() + sum(preds)
b = a/248
preds.append(b)
结果
#calculate rmse
rms=np.sqrt(np.mean(np.power((np.array(valid['Close'])-preds),2)))
rms
104.51415465984348
仅仅检查RMSE并不能帮助我们评估模型预测效果的。让我们通过做图得到更直观的理解。下面是预测值和实际值的曲线图。
#plot
valid['Predictions'] = 0
valid['Predictions'] = preds
plt.plot(train['Close'])
plt.plot(valid[['Close', 'Predictions']])
推论
RMSE值接近105,但是结果不是很理想(从图中可以看出)。预测值与训练集的观测值的范围相同(开始有上升趋势,然后缓慢下降)。
在下一节中,我们将使用两种常用的机器学习技术——线性回归和kNN,看看它们在我们的股票市场数据上表现如何。
3、线性回归
简介
在这些数据上可以实现的最基本的机器学习算法是线性回归。线性回归模型生成一个确定自变量和因变量之间关系的方程。
线性回归方程可以写成:
在这里x1, x2, ....xn代表自变量,系数θ1,θ2,....θn代表权重。你可以参考下面的文章来更详细地学习线性回归:
对于线性回归和Lasso回归的一个综合的初学者指南.
我们的问题中,没有太多的自变量,只有日期。让我们使用时间(date)列提取特征,如- day, month, year, mon/fri等,然后拟合线性回归模型。
实现
我们将首先按升序对数据集进行排序,然后创建一个单独的数据集,这样创建的任何新特性都不会影响原始数据。
#setting index as date values
df['Date'] = pd.to_datetime(df.Date,format='%Y-%m-%d')
df.index = df['Date']
#sorting
data = df.sort_index(ascending=True, axis=0)
#creating a separate dataset
new_data = pd.DataFrame(index=range(0,len(df)),columns=['Date', 'Close'])
for i in range(0,len(data)):
new_data['Date'][i] = data['Date'][i]
new_data['Close'][i] = data['Close'][i]
#create features
from fastai.structured import add_datepart
add_datepart(new_data, 'Date')
new_data.drop('Elapsed', axis=1, inplace=True) #elapsed will be the time stamp
这将创建以下特征:
‘Year’, ‘Month’, ‘Week’, ‘Day’, ‘Dayofweek’, ‘Dayofyear’, ‘Is_month_end’, ‘Is_month_start’, ‘Is_quarter_end’, ‘Is_quarter_start’, ‘Is_year_end’, and ‘Is_year_start’.
注意:我使用了来自fastai库的add_datepart。如果您没有安装它,您可以简单地使用命令pip install fastai。您也可以使用python中的简单for循环来创建这些特性。我在下面展示了一个例子。
除此之外,我们还可以添加自己的一组特性,我们认为这些特性与预测相关。例如,我的假设是,本周的头几天和最后几天对股票收盘价的影响可能远远超过其他日子。因此,我创建了一个特性来识别给定的一天是星期一/星期五还是星期二/星期三/星期四。这可以用以下几行代码来完成:
new_data['mon_fri'] = 0
for i in range(0,len(new_data)):
if (new_data['Dayofweek'][i] == 0 or new_data['Dayofweek'][i] == 4):
new_data['mon_fri'][i] = 1
else:
new_data['mon_fri'][i] = 0
如果是星期日或星期五,列值将为1,否则为0。类似地,您可以创建多个特性。如果你对有助于预测股价的特征有一些想法,请在留言里分享。
现在我们将把数据分成训练集和验证集来检查模型的性能。
#split into train and validation
train = new_data[:987]
valid = new_data[987:]
x_train = train.drop('Close', axis=1)
y_train = train['Close']
x_valid = valid.drop('Close', axis=1)
y_valid = valid['Close']
#implement linear regression
from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(x_train,y_train)
结果
#make predictions and find the rmse
preds = model.predict(x_valid)
rms=np.sqrt(np.mean(np.power((np.array(y_valid)-np.array(preds)),2)))
rms
121.16291596523156
RMSE值高于之前的方法,这清楚地表明线性回归的表现很差。让我们看看这个图,并理解为什么线性回归预测效果不是很好:
#plot
valid['Predictions'] = 0
valid['Predictions'] = preds
valid.index = new_data[987:].index
train.index = new_data[:987].index
plt.plot(train['Close'])
plt.plot(valid[['Close', 'Predictions']])
推论
线性回归是一种简单的技术,很容易解释,但也有一些明显的缺点。使用回归算法的一个问题是,模型过度拟合了日期和月份。模型将考虑一个月前相同日期或一年前相同日期/月的值,而不是从预测的角度考虑以前的值。
从上图可以看出,2016年1月和2017年1月,股价出现下跌。该模型预测2018年1月也将如此。线性回归技术可以很好地解决像大卖场销售这样的问题,在这些问题中,独立的特征对于确定目标值是有用的。
4、k-近邻
简介
另一个有趣的ML算法是kNN (k近邻)。基于自变量,kNN可以发现新数据点与旧数据点之间的相似性。让我用一个简单的例子来解释这个问题。
考虑11个人的身高和年龄。根据给定的特征(“年龄”和“身高”),下表可以用图形形式表示,如下图所示:
为了确定ID #11的权重,kNN考虑该ID的最近邻居的权重。ID #11的权重被预测为其邻居的平均值。如果我们现在考虑三个邻居(k=3), ID#11的重量将是= (77+72+60)/3 = 69.66 kg。
对于kNN的详细了解,可以参考以下文章:
k近邻介绍:简介
对k近邻回归算法的实际介绍
实现
#importing libraries
from sklearn import neighbors
from sklearn.model_selection import GridSearchCV
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler(feature_range=(0, 1))
使用上一节中相同的训练和验证集:
#scaling data
x_train_scaled = scaler.fit_transform(x_train)
x_train = pd.DataFrame(x_train_scaled)
x_valid_scaled = scaler.fit_transform(x_valid)
x_valid = pd.DataFrame(x_valid_scaled)
#using gridsearch to find the best parameter
params = {'n_neighbors':[2,3,4,5,6,7,8,9]}
knn = neighbors.KNeighborsRegressor()
model = GridSearchCV(knn, params, cv=5)
#fit the model and make predictions
model.fit(x_train,y_train)
preds = model.predict(x_valid)
结果
#rmse
rms=np.sqrt(np.mean(np.power((np.array(y_valid)-np.array(preds)),2)))
rms
115.17086550026721
RMSE值并没有太大的差异,但是一个预测值和实际值的曲线图应该提供一个更清晰的理解。
#plot
valid['Predictions'] = 0
valid['Predictions'] = preds
plt.plot(valid[['Close', 'Predictions']])
plt.plot(train['Close'])
推论
RMSE值与线性回归模型近似,图中呈现出相同的模式。与线性回归一样,kNN也发现了2018年1月的下降,因为这是过去几年的模式。我们可以有把握地说,回归算法在这个数据集上表现得并不好。
让我们来看一些时间序列预测技术,看看它们在面对股价预测挑战时的表现。
5、自动ARIMA
简介
ARIMA是一种非常流行的时间序列预测统计方法。ARIMA模型使用过去的值来预测未来的值。ARIMA中有三个重要参数:
p(用来预测下一个值的过去值)
q(用来预测未来值的过去预测误差)
d(差分的顺序)
ARIMA的参数优化需要大量时间。因此我们将使用自动 ARIMA,自动选择误差最小的(p,q,d)最佳组合。要了解更多关于自动ARIMA的工作原理,请参阅本文:
利用自动ARIMA建立高性能时间序列模型
实现
from pyramid.arima import auto_arima
data = df.sort_index(ascending=True, axis=0)
train = data[:987]
valid = data[987:]
training = train['Close']
validation = valid['Close']
model = auto_arima(training, start_p=1, start_q=1,max_p=3, max_q=3, m=12,start_P=0, seasonal=True,d=1, D=1, trace=True,error_action='ignore',suppress_warnings=True)
model.fit(training)
forecast = model.predict(n_periods=248)
forecast = pd.DataFrame(forecast,index = valid.index,columns=['Prediction'])
结果
rms=np.sqrt(np.mean(np.power((np.array(valid['Close'])-np.array(forecast['Prediction'])),2)))
rms
44.954584993246954
#plot
plt.plot(train['Close'])
plt.plot(valid['Close'])
plt.plot(forecast['Prediction'])
推论
正如我们前面看到的,自动ARIMA模型使用过去的数据来理解时间序列中的模式。利用这些值,该模型捕捉到该系列中的增长趋势。虽然使用这种技术的预测比以前实现的机器学习模型的预测要好得多,但是这些预测仍然与实际值相距甚远。
从图中可以明显看出,该模型在序列中捕捉到了一种趋势,但忽略了季节的影响。在下一节中,我们将使用一个同时考虑了序列的趋势和季节性的时间序列模型。该模型。
6、先知(Prophet)
简介
有许多时间序列技术可以用在股票预测数据集上,但是大多数技术在拟合模型之前需要大量的数据预处理。Prophet(先知)由Facebook设计和开发,是一个时间序列预测库,不需要数据预处理,并且非常容易实现。先知的输入是一个带有两列的数据框:日期和目标(ds和y)。
先知试图在过去的数据中捕捉季节性,并且在数据集很大的时候依然表现良好。这里有一篇有趣的文章,用一个简单和直观的方式解释了先知算法:
使用Facebook的Prophet生成快速准确的时间序列预测
实现
#importing prophet
from fbprophet import Prophet
#creating dataframe
new_data = pd.DataFrame(index=range(0,len(df)),columns=['Date', 'Close'])
for i in range(0,len(data)):
new_data['Date'][i] = data['Date'][i]
new_data['Close'][i] = data['Close'][i]
new_data['Date'] = pd.to_datetime(new_data.Date,format='%Y-%m-%d')
new_data.index = new_data['Date']
#preparing data
new_data.rename(columns={'Close': 'y', 'Date': 'ds'}, inplace=True)
#train and validation
train = new_data[:987]
valid = new_data[987:]
#fit the model
model = Prophet()
model.fit(train)
#predictions
close_prices = model.make_future_dataframe(periods=len(valid))
forecast = model.predict(close_prices)
结果
#rmse
forecast_valid = forecast['yhat'][987:]
rms=np.sqrt(np.mean(np.power((np.array(valid['y'])-np.array(forecast_valid)),2)))
rms
57.494461930575149
#plot
valid['Predictions'] = 0
valid['Predictions'] = forecast_valid.values
plt.plot(train['y'])
plt.plot(valid[['y', 'Predictions']])
推论
先知(像大多数时间序列预测技术一样)试图从过去的数据中捕捉趋势和季节性。该模型通常在时间序列数据集上表现良好,但在本例中没有达到预期效果。
事实证明,股票价格没有特定的趋势或季节性。价格的涨跌很大程度上取决于目前市场上的情况。因此,像ARIMA、SARIMA和Prophet这样的预测技术并不能很好地解决这个特殊的问题。
让我们继续尝试另一种高级技术——长短时记忆网络(LSTM)。
7、长短期记忆网络(LSTM)
简介
LSTM 算法广泛应用于序列预测问题中,并被证明是一种非常有效的方法。它们之所表现如此出色,是因为LSTM能够存储重要的既往信息,并忽略不重要的信息。
LSTM有三个门:
输入门:输入门将信息添加到细胞状态
遗忘门:它移除模型不再需要的信息
输出门:LSTM的输出门选择作为输出的信息
要更详细地了解LSTM及其体系结构,可以阅读下面的文章:
长短期记忆网络简介
现在,让我们将LSTM实现为一个黑盒,并检查它在特定数据上的性能。
实现
#importing required libraries
from sklearn.preprocessing import MinMaxScaler
from keras.models import Sequential
from keras.layers import Dense, Dropout, LSTM
#creating dataframe
data = df.sort_index(ascending=True, axis=0)
new_data = pd.DataFrame(index=range(0,len(df)),columns=['Date', 'Close'])
for i in range(0,len(data)):
new_data['Date'][i] = data['Date'][i]
new_data['Close'][i] = data['Close'][i]
#setting index
new_data.index = new_data.Date
new_data.drop('Date', axis=1, inplace=True)
#creating train and test sets
dataset = new_data.values
train = dataset[0:987,:]
valid = dataset[987:,:]
#converting dataset into x_train and y_train
scaler = MinMaxScaler(feature_range=(0, 1))
scaled_data = scaler.fit_transform(dataset)
x_train, y_train = [], []
for i in range(60,len(train)):
x_train.append(scaled_data[i-60:i,0])
y_train.append(scaled_data[i,0])
x_train, y_train = np.array(x_train), np.array(y_train)
x_train = np.reshape(x_train, (x_train.shape[0],x_train.shape[1],1))
# create and fit the LSTM network
model = Sequential()
model.add(LSTM(units=50, return_sequences=True, input_shape=(x_train.shape[1],1)))
model.add(LSTM(units=50))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
model.fit(x_train, y_train, epochs=1, batch_size=1, verbose=2)
#predicting 246 values, using past 60 from the train data
inputs = new_data[len(new_data) - len(valid) - 60:].values
inputs = inputs.reshape(-1,1)
inputs = scaler.transform(inputs)
X_test = []
for i in range(60,inputs.shape[0]):
X_test.append(inputs[i-60:i,0])
X_test = np.array(X_test)
X_test = np.reshape(X_test, (X_test.shape[0],X_test.shape[1],1))
closing_price = model.predict(X_test)
closing_price = scaler.inverse_transform(closing_price)
结果
rms=np.sqrt(np.mean(np.power((valid-closing_price),2)))
rms
11.772259608962642
#for plotting
train = new_data[:987]
valid = new_data[987:]
valid['Predictions'] = closing_price
plt.plot(train['Close'])
plt.plot(valid[['Close','Predictions']])
推论
哇!LSTM轻松地超越了我们目前看到的任何算法。LSTM模型可以对各种参数进行调优,如改变LSTM层数、增加dropout值或增加训练迭代轮数(epoch)数。但LSTM的预测是否足以确定股票价格将上涨还是下跌?当然不行!
正如我在文章开头提到的,股价受到公司新闻和其他因素的影响,如公司的非货币化或合并/分拆。还有一些无形的因素往往是无法事先预测的。
写在最后
我在写这些文章时意识到时间序列预测是一个非常有趣的领域。在社区中有观点认为这是一个复杂的领域,虽然有一定道理,我还是想说一旦你掌握了基本的技巧,就不难理解它了。
我对LSTM如何处理其他时间序列的问题很感兴趣,并鼓励您自己也尝试一下。如果你有任何问题,请在下面的留言部分与我联系。
原文链接:https://www.analyticsvidhya.com/blog/2018/10/predicting-stock-price-machine-learningnd-deep-learning-techniques-python/
译者简介
赵雪尧,北邮研三在读,京东见习算法工程师,目前研究强化学习广告竞价模型。相信数据和算法将为企业发展赋能,希望跟志同道合的小伙伴一起追寻前沿消息,深入探索算法的极限。在玄学调参的道路上,一路狂奔。
翻译组招募信息
工作内容:需要一颗细致的心,将选取好的外文文章翻译成流畅的中文。如果你是数据科学/统计学/计算机类的留学生,或在海外从事相关工作,或对自己外语水平有信心的朋友欢迎加入翻译小组。
你能得到:定期的翻译培训提高志愿者的翻译水平,提高对于数据科学前沿的认知,海外的朋友可以和国内技术应用发展保持联系,THU数据派产学研的背景为志愿者带来好的发展机遇。
其他福利:来自于名企的数据科学工作者,北大清华以及海外等名校学生他们都将成为你在翻译小组的伙伴。
点击文末“阅读原文”加入数据派团队~
转载须知
如需转载,请在开篇显著位置注明作者和出处(转自:数据派ID:datapi),并在文章结尾放置数据派醒目二维码。有原创标识文章,请发送【文章名称-待授权公众号名称及ID】至联系邮箱,申请白名单授权并按要求编辑。
发布后请将链接反馈至联系邮箱(见下方)。未经许可的转载以及改编者,我们将依法追究其法律责任。
点击“阅读原文”拥抱组织
独家 | 利用深度学习和机器学习预测股票市场(附代码)相关推荐
- 推荐 : 利用深度学习和机器学习预测股票市场(附代码)
来源:AISHWARYA SINGH, 2018年10月25日:翻译:赵雪尧:校对:车前子 本文约8000字,建议阅读15+分钟. 本文介绍了如何运用深度学习法预测股票市场. 简介 预测股市将如何变化 ...
- 【深度学习】利用深度学习进行时间序列预测
作者 | Christophe Pere 编译 | VK 来源 | Towards Datas Science 介绍 长期以来,我听说时间序列问题只能用统计方法(AR[1],AM[2],ARMA[3] ...
- 10个深度学习软件的安装指南(附代码)
来源:AI前线 本文长度为2385字,建议阅读4分钟 本文为你介绍10个深度学习软件安装指南. 由于近期论文的需要,我搭建了一个基于 Ubuntu 和英伟达的深度学习环境.尽管已经有很多非常棒的关于英 ...
- 独家 | 利用深度学习来预测Spotify上的Hip-Hop 流行程度
作者:Nicholas Indorf翻译:Gabriel Ng校对:zrx本文约10000字,建议阅读13分钟 项目中收集并使用了 Spotify 数据库中最近发布的hip-hop曲目的音频预览样本和 ...
- 利用深度学习进行时间序列预测
加载序列数据 加载示例数据.chickenpox_dataset 包含一个时序,其时间步对应于月份,值对应于病例数.输出是一个元胞数组,其中每个元素均为单一时间步.将数据重构为行向量. data = ...
- 基于keras和深度学习的视频分类实战(附代码)
作者首先通过train.py训练微调模型,之后用训练好的模型在predict_video.py进行视频分类. 在执行图像分类时,我们: 输入一幅图像到我们的CNN中: 从CNN中获得预测: 选择相应概 ...
- 谷歌Jeff Dean团队提出利用深度学习对「电子健康记录」数据进行分析,可提高医疗诊断预测的准确性
原文来源:arXiv 作者:Alvin Rajkomar.Eyal Oren.Kai Chen.Andrew M. Dai.Nissan Hajaj.Peter J. Liu.Xiaobing Liu ...
- Nat. Biotechnol. | 利用深度学习从基因转录数据中预测药物疗效
作者 | 蒋长志 审稿 | 蒋立坤 今天给大家介绍来自北京大学医学部的谢正伟团队发表在Nature Biotechnology上的文章,文章提出了一种基于深度学习的药效预测系统(DLEPS),该系统将 ...
- 深度学习、机器学习方向计算机毕业设计题目大全(算法应用实践类)
(吐血整理) 手动整理了1500多个深度学习及机器学习相关算法在实际应用中的项目,完全可以作为本科生当前较新的毕业设计题目选择方向.讲道理有些题目,比如"用户评分的隐式成分信息的研究&quo ...
最新文章
- java中next的用法_关于java iterator的next()方法的用法
- 2-数组中重复的数字
- docker安装到指定目录_Docker常用命令总结
- js检查数据类型的方法
- Unity 检测物体是否在相机视野范围内
- 超简单的memcached集群搭建
- 毕业后,她用1年时间拿下了30W年薪的阿里数据分析岗
- Qt学习之路之解决unable to find a qt build,to solve this problem specify a qt build
- 信号处理--几种常见的窗函数
- python for spss statistics_SPSS Statistics功能介绍
- iPhone如何快速设置自定义铃声?苹果手机铃声设置教程
- 官方太空射击游戏总结
- CNN卷积神经网络(图解CNN)
- jquery-重要的方法和注意事项
- 盛金公式解一元三次方程_一元三次方程解法(卡尔丹公式法盛金公式法)
- Python安装教程和Pycham教程
- Docker Registry部署镜像私有仓库及鉴权认证
- 笔记本电脑外接显示器,仅显示器的时候卡顿问题的解决方案
- 第979期机器学习日报(2017-05-24)
- 开发规范-java代码注释及IDEA配置代码注释模板
热门文章
- ssm+java计算机毕业设计在线商城系统设计g0d26(程序+lw+源码+远程部署)
- 玩转ERP:一句话介绍一下SAP CS模块
- dat图片 电脑端微信_PC端微信下的dat 文件在线解码还原成为图片
- No package ‘orocos-bfl‘ found
- VM ware ESXI 6.5安装方法-华为R2488 V5服务器
- [威客任务]¥800.00 JS实现网站联动三级选项
- 当Python碰上斗地主残局,该如何破解?AI对AI谁能更胜一筹?
- SoGua音乐论坛被挂马 音乐小说成黑客攻击目标
- android面试复习大全
- android拨打电话的日志,Android-9种通话状态(精确)