本文目录一览:
- 1、python软件的设置都有哪些
- 2、Python 使用对象模型来存储数据?
- 3、如何安装Python 3中,并设置本地编程环境在CentOS 7
- 4、如何在Python中用LSTM网络进行时间序列预测
- 5、python怎么设置环境变量
- 6、如何利用python实现bass模型
python软件的设置都有哪些
Python的编辑器也是众多的,下面说下几种: 提问者使用的是dos的编辑器,这一种当然不舒服; Python的自带的有两种: 2.1 Shell形式:这一种和dos一样很纠结,如下图: 2.2 Edit形式,比较灵活,建议使用: 其他的第三方,比如Eclips+PyDev等
Python 使用对象模型来存储数据?
Python使用对象模型来存储数据。构造任何类型的值都是一个对象。尽管Python通常被当成一种“面向对象的编程语言”,但你完全能够写出不使用任何类和实例的实用脚本。不过Python的对象语法和架构鼓励我们使用这些特性,下面让我们仔细研究一下Python对象。所有的Python对像都拥有三个特性:身份,类型和值。
身份:每一个对象都有一个唯一的身份标识自己,任何对象的身份可以使用内建函数id()来得到。这个值可以被认为是该对象的内存地址。你极少会用到这个值,也不用太关心它究竟是什么。
类型对象的类型决定了该对象可以保存什么类型的值,可以进行什么样的操作,以及遵循什么样的规则。你可以用内建函数type0查看Python对象的类型。因为在Python中类型也是对象(还记得我们提到Python是面向对象的这句话吗?),所以type0返回的是对象而不是简单的字符串。
值:对象表示的数据项。
上面三个特性在对象创建的时候就被赋值,除了值之外,其他两个特性都是只读的。对于新式类型和类,对象的类型也是可以改变的,不过并不推荐初学者这样做。如果对象支持更新操作,那么它的值就可以改变,否则它的值也是只读的。对象的值是否可以更改被称为对象的可改变性(mutability),我们会在后面的4.7小节中讨论这个问题。只要一个对象还没有被销毁,这些特性就一直存在。Python有一系列的基本(内建)数据类型,必要时也可以创建自定义类型来满足你对应用程序的需求。绝大多数应用程序通常使用标准类型,对特定的数据存储则通过创建和实例化类来实现。
如何安装Python 3中,并设置本地编程环境在CentOS 7
介绍
Python是一种多功能编程语言,可以用于许多不同的编程项目。开发团队于1991年首先发表了一个名叫灵感来源于英国喜剧组织Monty Python的名字,他希望Python能够成为一种有趣的语言。对于初学者和经验丰富的开发人员来说,Python易于设置,并且以相对直接的方式编写,并提供对错误的即时反馈。Python 3是该语言的最新版本,被认为是Python的未来。
本教程将指导您在本地CentOS 7机器上安装Python 3,并通过命令行设置编程环境。
先决条件
您将需要一台连接到互联网的非root超级用户帐户的CentOS 7计算机。
第1步 - 准备系统
我们将通过命令行来完成这个安装。如果您的CentOS 7计算机启动了图形用户界面(GUI)桌面,则可以通过菜单访问命令行界面,方法是导航到应用程序,然后导航到实用程序,然后单击终端。如果您需要更多关于终端的指导,请务必阅读文章“ Linux终端简介 ”。
在开始安装之前,让我们确保更新默认的系统应用程序以获得最新版本。
我们将使用开源包管理工具yum,代表Yellowdog Updater Modified。这是一个常用的工具,用于在基于Red Hat的Linux系统(如CentOS)上处理软件包。它可以让你轻松地安装和更新,以及删除您的计算机上的软件包。
我们首先通过运行这个命令来确保yum是最新的:(更新系统是可选执行)
sudo yum -y update
该-y标志用于警告系统,我们知道我们正在进行更改,防止终端提示我们确认。
接下来,我们将安装yum-utils,这是一个扩展和补充yum的实用程序和插件的集合:(也可以不安装)
sudo yum -y install yum-utils
最后,我们将安装CentOS开发工具,这些工具用于允许您从源代码构建和编译软件:(也可以不安装)
sudo yum -y groupinstall development
一旦安装好了,我们的安装就绪了,我们可以继续安装Python 3。
第2步 - 安装和设置Python 3
CentOS源自RHEL(红帽企业Linux),其稳定性是其主要焦点。正因为如此,经过测试和稳定版本的应用程序是最常见的系统和可下载的软件包,所以在CentOS上,你只能找到Python 2。
因为我们想要安装Python 3的最新上游稳定版本,我们需要安装IUS,代表Inline with Upstream Stable。作为一个社区项目,IUS为选择软件的一些更新版本提供了红帽软件包管理器(RPM)软件包。
要安装IUS,先要安装epel-release7包 我们来安装它yum:
sudo yum -y install epel-release-7-11.noarch.rpm
sudo yum -y install ius-release.rpm
一旦IUS完成安装,我们可以安装最新版本的Python:
sudo yum -y install python36u
当Python的安装过程完成后,我们可以通过以下python3.6命令检查其安装是否成功:
python3.6 -V
使用成功安装的Python 3.6版本,我们将收到以下输出:
Output
Python 3.6.1
接下来我们将安装pip,它将管理Python的软件包:
sudo yum -y install python36u-pip
一个用于Python的工具,我们将使用pip来安装和管理我们可能想在我们的开发项目中使用的编程包。你可以通过键入以下命令来安装Python包
sudo pip3.6 install package_name
在这里,package_name可以参考任何Python包或者库,比如用于Web开发的Django或者用于科学计算的NumPy。所以如果你想安装NumPy,你可以使用命令来完成pip3.6 install numpy。
最后,我们将需要安装IUS软件包python36u-devel,它为我们提供了Python 3开发所需的库和头文件:
sudo yum -y install python36u-devel
该VENV模块将用于建立一个虚拟的环境,为我们下一步的发展项目。
第3步 - 建立一个虚拟环境
现在,我们已经安装了Python,并且已经安装好了系统,我们可以继续使用venv创建我们的编程环境。
虚拟环境使您能够在计算机上为Python项目设置一个独立的空间,确保您的每个项目都拥有自己的一组依赖项,不会中断任何其他项目。
建立一个编程环境使我们能够更好地控制我们的Python项目以及如何处理不同版本的包。使用第三方软件包时,这一点尤为重要。
您可以根据需要设置尽可能多的Python编程环境。每个环境基本上都是您的计算机中的一个目录或文件夹,其中包含一些脚本以使其充当环境。
选择你想把你的Python编程环境放入哪个目录,或者创建一个新目录mkdir,如下所示:
mkdir environments
cd environments
一旦进入了你想要环境所在的目录,就可以通过运行以下命令来创建一个环境:
python3.6 -m venv my_env
本质上,这个命令会创建一个新的目录(在本例中称为my_env),其中包含一些我们可以通过ls命令看到的项目:
bin include lib lib64 pyvenv.cfg
这些文件一起工作,以确保您的项目与本地计算机的更广泛的上下文隔离,以便系统文件和项目文件不会混合。这是版本控制的好习惯,并确保您的每个项目都可以访问它所需的特定软件包。
要使用这个环境,你需要激活它,你可以通过输入以下命令来调用目录中的激活脚本bin:
source my_env/bin/activate
您的提示现在将以您的环境的名称作为前缀,在这种情况下,它被称为my_env:
这个前缀让我们知道my_env环境当前是活动的,这意味着当我们在这里创建程序时,他们将只使用这个特定环境的设置和包。
注意:在虚拟环境中,您可以使用命令python而不是python3.6,而pip不是pip3.6如果您愿意的话。如果您在环境外使用Python 3,则需要专门使用python3.6和pip3.6命令。
遵循这些步骤之后,即可使用您的虚拟环境。
第4步 - 创建一个简单的程序
现在我们已经建立了虚拟环境,我们来创建一个简单的“Hello,World!”程序。这将确保我们的环境正在工作,并且使我们有机会更熟悉Python,如果我们还没有。
为此,我们将打开一个名为vim的命令行文本编辑器,并创建一个新文件:
vi hello.py
一旦文本文件在我们的终端窗口打开,我们将不得不键入i进入插入模式,然后我们可以写我们的第一个程序:
print("Hello, World!")
现在按下ESC退出插入模式。接下来,输入:x然后ENTER保存并退出文件。
我们现在准备好运行我们的程序:
python hello.py
刚刚创建的hello.py程序应该使终端产生以下输出:
Output
Hello, World!
要离开环境,只需键入命令,deactivate然后返回到原始目录。
结论
恭喜!此时,您已经在本地CentOS 7机器上安装了Python 3编程环境,并且可以开始一个编码项目!
如何在Python中用LSTM网络进行时间序列预测
时间序列模型
时间序列预测分析就是利用过去一段时间内某事件时间的特征来预测未来一段时间内该事件的特征。这是一类相对比较复杂的预测建模问题,和回归分析模型的预测不同,时间序列模型是依赖于事件发生的先后顺序的,同样大小的值改变顺序后输入模型产生的结果是不同的。
举个栗子:根据过去两年某股票的每天的股价数据推测之后一周的股价变化;根据过去2年某店铺每周想消费人数预测下周来店消费的人数等等
RNN 和 LSTM 模型
时间序列模型最常用最强大的的工具就是递归神经网络(recurrent neural network, RNN)。相比与普通神经网络的各计算结果之间相互独立的特点,RNN的每一次隐含层的计算结果都与当前输入以及上一次的隐含层结果相关。通过这种方法,RNN的计算结果便具备了记忆之前几次结果的特点。
典型的RNN网路结构如下:
右侧为计算时便于理解记忆而产开的结构。简单说,x为输入层,o为输出层,s为隐含层,而t指第几次的计算;V,W,U为权重,其中计算第t次的隐含层状态时为St = f(U*Xt + W*St-1),实现当前输入结果与之前的计算挂钩的目的。对RNN想要更深入的了解可以戳这里。
RNN的局限:
由于RNN模型如果需要实现长期记忆的话需要将当前的隐含态的计算与前n次的计算挂钩,即St = f(U*Xt + W1*St-1 + W2*St-2 + ... + Wn*St-n),那样的话计算量会呈指数式增长,导致模型训练的时间大幅增加,因此RNN模型一般直接用来进行长期记忆计算。
LSTM模型
LSTM(Long Short-Term Memory)模型是一种RNN的变型,最早由Juergen Schmidhuber提出的。经典的LSTM模型结构如下:
LSTM的特点就是在RNN结构以外添加了各层的阀门节点。阀门有3类:遗忘阀门(forget gate),输入阀门(input gate)和输出阀门(output gate)。这些阀门可以打开或关闭,用于将判断模型网络的记忆态(之前网络的状态)在该层输出的结果是否达到阈值从而加入到当前该层的计算中。如图中所示,阀门节点利用sigmoid函数将网络的记忆态作为输入计算;如果输出结果达到阈值则将该阀门输出与当前层的的计算结果相乘作为下一层的输入(PS:这里的相乘是在指矩阵中的逐元素相乘);如果没有达到阈值则将该输出结果遗忘掉。每一层包括阀门节点的权重都会在每一次模型反向传播训练过程中更新。更具体的LSTM的判断计算过程如下图所示:
LSTM模型的记忆功能就是由这些阀门节点实现的。当阀门打开的时候,前面模型的训练结果就会关联到当前的模型计算,而当阀门关闭的时候之前的计算结果就不再影响当前的计算。因此,通过调节阀门的开关我们就可以实现早期序列对最终结果的影响。而当你不不希望之前结果对之后产生影响,比如自然语言处理中的开始分析新段落或新章节,那么把阀门关掉即可。(对LSTM想要更具体的了解可以戳这里)
下图具体演示了阀门是如何工作的:通过阀门控制使序列第1的输入的变量影响到了序列第4,6的的变量计算结果。
黑色实心圆代表对该节点的计算结果输出到下一层或下一次计算;空心圆则表示该节点的计算结果没有输入到网络或者没有从上一次收到信号。
Python中实现LSTM模型搭建
Python中有不少包可以直接调用来构建LSTM模型,比如pybrain, kears, tensorflow, cikit-neuralnetwork等(更多戳这里)。这里我们选用keras。(PS:如果操作系统用的linux或者mac,强推Tensorflow!!!)
因为LSTM神经网络模型的训练可以通过调整很多参数来优化,例如activation函数,LSTM层数,输入输出的变量维度等,调节过程相当复杂。这里只举一个最简单的应用例子来描述LSTM的搭建过程。
应用实例
基于某家店的某顾客的历史消费的时间推测该顾客前下次来店的时间。具体数据如下所示:
消费时间
2015-05-15 14:03:512015-05-15 15:32:462015-06-28 18:00:172015-07-16 21:27:182015-07-16 22:04:512015-09-08 14:59:56..
..
具体操作:
1. 原始数据转化
首先需要将时间点数据进行数值化。将具体时间转化为时间段用于表示该用户相邻两次消费的时间间隔,然后再导入模型进行训练是比较常用的手段。转化后的数据如下:
消费间隔04418054..
..
2.生成模型训练数据集(确定训练集的窗口长度)
这里的窗口指需要几次消费间隔用来预测下一次的消费间隔。这里我们先采用窗口长度为3, 即用t-2, t-1,t次的消费间隔进行模型训练,然后用t+1次间隔对结果进行验证。数据集格式如下:X为训练数据,Y为验证数据。
PS: 这里说确定也不太合适,因为窗口长度需要根据模型验证结果进行调整的。
X1 X2 X3 Y0 44 18 044 18 0 54..
..
注:直接这样预测一般精度会比较差,可以把预测值Y根据数值bin到几类,然后用转换成one-hot标签再来训练会比较好。比如如果把Y按数值范围分到五类(1:0-20,2:20-40,3:40-60,4:60-80,5:80-100)上式可化为:
X1 X2 X3 Y0 44 18 044 18 0 4...
Y转化成one-hot以后则是(关于one-hot编码可以参考这里)
1 0 0 0 00 0 0 0 1...
3. 网络模型结构的确定和调整
这里我们使用python的keras库。(用java的同学可以参考下deeplearning4j这个库)。网络的训练过程设计到许多参数的调整:比如
需要确定LSTM模块的激活函数(activation fucntion)(keras中默认的是tanh);
确定接收LSTM输出的完全连接人工神经网络(fully-connected artificial neural network)的激活函数(keras中默认为linear);
确定每一层网络节点的舍弃率(为了防止过度拟合(overfit)),这里我们默认值设定为0.2;
确定误差的计算方式,这里我们使用均方误差(mean squared error);
确定权重参数的迭代更新方式,这里我们采用RMSprop算法,通常用于RNN网络。
确定模型训练的epoch和batch size(关于模型的这两个参数具体解释戳这里)
一般来说LSTM模块的层数越多(一般不超过3层,再多训练的时候就比较难收敛),对高级别的时间表示的学习能力越强;同时,最后会加一层普通的神经网路层用于输出结果的降维。典型结构如下:
如果需要将多个序列进行同一个模型的训练,可以将序列分别输入到独立的LSTM模块然后输出结果合并后输入到普通层。结构如下:
4. 模型训练和结果预测
将上述数据集按4:1的比例随机拆分为训练集和验证集,这是为了防止过度拟合。训练模型。然后将数据的X列作为参数导入模型便可得到预测值,与实际的Y值相比便可得到该模型的优劣。
实现代码
时间间隔序列格式化成所需的训练集格式
import pandas as pdimport numpy as npdef create_interval_dataset(dataset, look_back):
""" :param dataset: input array of time intervals :param look_back: each training set feature length :return: convert an array of values into a dataset matrix. """
dataX, dataY = [], [] for i in range(len(dataset) - look_back):
dataX.append(dataset[i:i+look_back])
dataY.append(dataset[i+look_back]) return np.asarray(dataX), np.asarray(dataY)
df = pd.read_csv("path-to-your-time-interval-file")
dataset_init = np.asarray(df) # if only 1 columndataX, dataY = create_interval_dataset(dataset, lookback=3) # look back if the training set sequence length
这里的输入数据来源是csv文件,如果输入数据是来自数据库的话可以参考这里
LSTM网络结构搭建
import pandas as pdimport numpy as npimport randomfrom keras.models import Sequential, model_from_jsonfrom keras.layers import Dense, LSTM, Dropoutclass NeuralNetwork():
def __init__(self, **kwargs):
""" :param **kwargs: output_dim=4: output dimension of LSTM layer; activation_lstm='tanh': activation function for LSTM layers; activation_dense='relu': activation function for Dense layer; activation_last='sigmoid': activation function for last layer; drop_out=0.2: fraction of input units to drop; np_epoch=10, the number of epoches to train the model. epoch is one forward pass and one backward pass of all the training examples; batch_size=32: number of samples per gradient update. The higher the batch size, the more memory space you'll need; loss='mean_square_error': loss function; optimizer='rmsprop' """
self.output_dim = kwargs.get('output_dim', 8) self.activation_lstm = kwargs.get('activation_lstm', 'relu') self.activation_dense = kwargs.get('activation_dense', 'relu') self.activation_last = kwargs.get('activation_last', 'softmax') # softmax for multiple output
self.dense_layer = kwargs.get('dense_layer', 2) # at least 2 layers
self.lstm_layer = kwargs.get('lstm_layer', 2) self.drop_out = kwargs.get('drop_out', 0.2) self.nb_epoch = kwargs.get('nb_epoch', 10) self.batch_size = kwargs.get('batch_size', 100) self.loss = kwargs.get('loss', 'categorical_crossentropy') self.optimizer = kwargs.get('optimizer', 'rmsprop') def NN_model(self, trainX, trainY, testX, testY):
""" :param trainX: training data set :param trainY: expect value of training data :param testX: test data set :param testY: epect value of test data :return: model after training """
print "Training model is LSTM network!"
input_dim = trainX[1].shape[1]
output_dim = trainY.shape[1] # one-hot label
# print predefined parameters of current model:
model = Sequential() # applying a LSTM layer with x dim output and y dim input. Use dropout parameter to avoid overfitting
model.add(LSTM(output_dim=self.output_dim,
input_dim=input_dim,
activation=self.activation_lstm,
dropout_U=self.drop_out,
return_sequences=True)) for i in range(self.lstm_layer-2):
model.add(LSTM(output_dim=self.output_dim,
input_dim=self.output_dim,
activation=self.activation_lstm,
dropout_U=self.drop_out,
return_sequences=True)) # argument return_sequences should be false in last lstm layer to avoid input dimension incompatibility with dense layer
model.add(LSTM(output_dim=self.output_dim,
input_dim=self.output_dim,
activation=self.activation_lstm,
dropout_U=self.drop_out)) for i in range(self.dense_layer-1):
model.add(Dense(output_dim=self.output_dim,
activation=self.activation_last))
model.add(Dense(output_dim=output_dim,
input_dim=self.output_dim,
activation=self.activation_last)) # configure the learning process
model.compile(loss=self.loss, optimizer=self.optimizer, metrics=['accuracy']) # train the model with fixed number of epoches
model.fit(x=trainX, y=trainY, nb_epoch=self.nb_epoch, batch_size=self.batch_size, validation_data=(testX, testY)) # store model to json file
model_json = model.to_json() with open(model_path, "w") as json_file:
json_file.write(model_json) # store model weights to hdf5 file
if model_weight_path: if os.path.exists(model_weight_path):
os.remove(model_weight_path)
model.save_weights(model_weight_path) # eg: model_weight.h5
return model
这里写的只涉及LSTM网络的结构搭建,至于如何把数据处理规范化成网络所需的结构以及把模型预测结果与实际值比较统计的可视化,就需要根据实际情况做调整了。
python怎么设置环境变量
Python设置环境变量的具体方法:
WINDOWS操作系统方法:
1、在python安装过程中会提示是否加入环境变量,勾选即可。
2、在系统变量里找到PATH,双击PATH,在结尾加上 ";C:\Python27"(不要引号)确定即可,如下图所示位置:
设置好环境变量之后,win+r 运行-cmd,在命令行窗口中输入python,即可运行。
输入
print "Hello World!"
应该有如下结果:
print "Hello World!"
Hello World!
linux系统安装好python后默认直接在终端输入python即可。
如何利用python实现bass模型
步骤如下:
1、下载maven的bin,在apache官方网站可以下载。
2、下载下来之后,解压,找个路径放进去, 把bin的位置设在环境变量里,新建环境变量MAVEN_HOME。
3、在PATH里加入maven的bin的路径。
4、配置完毕后,在Windows命令提示符下,输入mvn -v测试一下。
5、配置成功后开始在MyEclipse中配置Maven,点击MyEclipse菜单栏Help-Eclipse Marketplace搜索关键字maven到插件Maven Integration for Eclipse 并点击安装即可。
6、安装完毕后,点击重启MyEclipse。
7、重启后,为了使得MyEclipse中安装的Maven插件,同windows中安装的那个相同,需要让MyEclipse中的maven重新定位一下,点击Window - Preference - Maven - Installation - Add进行设置。
9、设置成功即安装完成。
注意:
由于Maven依赖Java运行环境,因此使用Maven之前需要配置Java的运行环境。下载并安装JDK,配置JDK的环境变量JAVA_HOME,否则maven将无法使用。