本文目錄一覽:
- 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將無法使用。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/301590.html