python權重
① 《python神經網路》3——神經網路矩陣乘法
按照以下圖示,最終的神經網路調參,以最簡單的3層神經網路為例,公式如下:
怎麼求這個函數的最優解?
如果不試圖耍聰明,那麼我們可以只是簡單地嘗試隨機組合權重,直到找到好的權重組合。
當陷入一個困難的問題而焦頭爛額時,這不算是一個瘋狂的想法。這種方法一般稱為暴力方法。
暴力方法的不好之處:
假設每個權重在-1和+1之間有1000種可能的值。那麼對於3層、每層3個節點的神經網路,可以得到18個權重,因此有18000種可能性需要測試。如果一個相對經典的神經網路,每層有500個節點,那麼需要測試5億種權重的可能性。如果每組組合需要花費1秒鍾計算,那麼對於一個訓練樣本,就需要花費16年更新權重!對於1000種訓練樣本,要花費16000年! 這就是暴力方法不切實際之處。
數學家多年來也未解決這個難題,直到20世紀60年代到70年代,這個難題才有了切實可行的求解辦法。
如何解決這樣一個明顯的難題呢?——我們必須做的第一件事是,擁抱悲觀主義。
② python實現資產配置(2)--Blacklitterman 模型
在 python實現資產配置(1)----Markowitz 投資組合模型 中, 我們已經見過如何使用Markowitz求得最優資產配比. 這是一種在已知未來各資產的概率分布,然後再求解的方法.
Markowitz模型輸入參數包括歷史數據法和情景分析法兩種方法,情景分析法的缺點是主觀因素,隨意性太強,因此使用歷史數據法, 將資產的均值和協方差輸入模型是比較常見的作法. 不過, 不足之處很明顯: 未來的資產收益率分布不一定與過去相同. 此外, Markowitz 模型結果對輸入參數過於敏感.
Black-Litterman模型就是基於此的改進. 其核心思想是將投資者對大類資產的觀點 (主觀觀點) 與市場均衡收益率 (先驗預期收益率)相結合,從而形成新的預期收益率(後驗預期收益率). 這里的先驗預期收益率的分布可以是貝葉斯推斷中的先驗概率密度函數的多元正態分布形式,投資者的主觀觀點就是貝葉斯推斷中的似然函數(可以看作新的信息, 因為做出主觀判斷必然是從外界獲取得到了這些資產的收益率變化信息), 而相應的, 後驗預期收益率也可以從後驗概率密度函數中得到. 具體的推導可以看我的這篇文章: 從貝葉斯定理到貝葉斯推斷 .
BL模型的求解步驟包括下面幾步:
(1) 使用歷史數據估計預期收益率的協方差矩陣作為先驗概率密度函數的協方差.
(2) 確定市場預期之收益率向量, 也就是先驗預期收益之期望值. 作為先驗概率密度函數的均值. 或者使用現有的期望值和方差來反推市場隱含的均衡收益率(Implied Equilibrium Return Vector), 不過在使用這種方法時, 需要知道無風險收益率 的大小.
(3) 融合投資人的個人觀點,即根據歷史數據(看法變數的方差)和個人看法(看法向量的均值)
(4) 修正後驗收益.
是均衡收益率協方差的調整系數,可以根據信心水平來判斷. 是歷史資產收益率的協方差矩陣, P是投資者的觀點矩陣, 是似然函數(即投資者觀點函數)中的協方差矩陣,其值為 的對角陣, 是先驗收益率的期望值.
(5) 投資組合優化: 將修正後的期望值與協方差矩陣即 重新代入Markowitz投資組合模型求解.
(1)定義求解函數,輸入為投資者觀點P,Q以及目前資產的市場收益率矩陣,輸出為後驗的市場收益率和協方差矩陣.
(2) 實列分析
我們繼續研究 python實現資產配置(1)----Markowitz 投資組合模型 中的五支股票: 白雲機場, 福建高速, 華夏銀行, 生益科技和浙能電力. 假設現在分析師的觀點為:
獲取股票數據, 並且獲得後驗的均值和方差:
這時候,已經可以使用Markowitz模型進行資產的配置. 定義新的函數blminVar以求解資產配置權重. 該函數的輸入變數為blacklitterman函數的輸出結果, 以及投資人的目標收益率goalRet.假設目標收益率為年化70%,則goalRet = 0.7:
輸出結果為:
0-5分別對應上面的五隻股票.
③ 如何計算向量與權重的乘積
向量與權重的乘積通常是機器學習中常用的運算,可以使用以下方式進行計算:
假設有一個m維向量x,以及m個權重敏豎w1,w2,...,wm,則向量與權重的乘積即為:
x1w1 + x2w2 + ... + xm*wm
其中,xi表示向量x中的第i個元素,wi表示權重中的第i個元素。
在實際機器學習演算法中,通常會將向量與權重的乘積表示成矩陣乘法的形式,即將m維向量x表示成1×m的矩陣(行向量),將權重表示成m×1的矩陣(列向量),然後進行矩型拿悔陣乘法運算得卜正到一個標量值。
以Python代碼為例,假設向量x和權重w均為長度為3的列表:
import numpy as np
x = [1, 2, 3]
w = [0.5, 0.6, 0.7]
result = np.dot(x, w)
print(result)
# 輸出結果為:
# 3.8
④ python怎麼根據權重賦分
python怎麼根據權重賦分旅核,使用python進行數據分析之前,需要預先導入相對應的功滾鎮胡能庫。數據分析最常用的庫包括用於數值計算的numpy,基於numpy構建的用於科學計算的Pandas庫,用於數據可視化的matplotlib和提供各種操作系統功能介面的OS庫。我們將這幾個庫導入到python中, import後是導入庫的名稱 as後是庫的大攔簡稱。例如pandas庫的簡稱是pd,在後面的代碼中看到pd就表示這個操作使用了pandas庫
⑤ python 操作memcached
1、設定緩存放在那裡:CACHE_BACKEND
也可以使用memcached:CACHE_BACKEND = 'memcached://127.0.0.1:11211/'
多個memcached:CACHE_BACKEND = 'memcached://172.19.26.240:11211;172.19.26.242:11211/'
/// pip install python-memcached
2、python 操作memcached:
import memcache
mc = memcache.Client(['139.129.5.191:12000'], debug=True)
mc.set("name", "python")
ret = mc.get('name')
print (ret)
python
3、設置權重
import memcache
mc = memcache.Client([('1.1.1.1:12000', 1), ('1.1.1.2:12000', 2),('1.1.1.3:12000',3)])
mc.set('k1','value1')
ret = mc.get('k1')
print (ret)
4、已經存在的鍵重復添加會出錯:
import memcache
mc = memcache.Client(['0.0.0.0:12000'])
mc.add('k1', 'v1')
mc.add('k1', 'v2') # 報錯,對已經存在的key重復添加,失敗!!!
例如:
ret1 = mc.add('name','tom')
print(refalse)
ret2 = mc.add('name','jack')
print(retrue)
結果:
False #當已經存在key 那麼返回false
True #如果不存在key 那麼返回treue
5、替換操作:replace,如果鍵不存在,出錯
import memcache
mc = memcache.Client(['0.0.0.0:12000'])
mc.set('name','tom')
re = mc.get('name')
print(re)
rereplace = mc.replace('name','jack')
re = mc.get('name')
print(rereplace,re)
結果:
tom #第一次賦值
True jack #如果存在key那麼修改成功為yaoyao 返回True
rereplace = mc.replace('name1','hahaha')
re = mc.get('name1')
print(rereplace,re)
結果:
False None #如果不存在key,修改失敗,返回空值
6、set:鍵值存在,就修改,不存在,則創建
import memcache
mc = memcache.Client(['0.0.0.0:12000'])
mc.set('name','tom')
re = mc.get('name')
print('set用法',re) #設置一個鍵值對
dic = {'name':'to,','age':'19','job':'IT'}
mc.set_multi(dic) #設置多個鍵值對
mcname = mc.get('name')
mcage = mc.get('age')
mcjob = mc.get('job')
print('set_multi用法:',mcname,mcage,mcjob)
7、delete:
import memcache
mc = memcache.Client(['0.0.0.0:12000'])
mc.set('name','tom')
re = mc.get('name')
print('存在',re)
mc.delete('name')
re = mc.get('name')
print('刪除',re) #刪除一個鍵值對
8、get
import memcache
mc = memcache.Client(['0.0.0.0:12000'])
mc.set('name','tom')
re = mc.get('name')
print('get',re) #獲取一個鍵值對
dic = {'name':'to,','age':'19','job':'IT'}
mc.set_multi(dic)
regetmu=mc.get_multi(['name','age','job'])
print('get_multi',re) #獲取多個鍵值對的值
9、append,prepend
import memcache
mc = memcache.Client(['0.0.0.0:12000'])
mc.set('num','第一|')
re = mc.get('num')
print(re)
mc.append('num','追加第二個') #在第一後面追加
re = mc.get('num')
print(re)
mc.prepend('num','我是零個') #在第一前面追加
re = mc.get('num')
print(re)
結果:
第一|
第一|追加第二個
我是零個第一|追加第二個
10、decr,incr自增自減
import memcache
mc = memcache.Client(['0.0.0.0:12000'])
mc.set('num','1')
re = mc.get('num')
print('我是沒加過的值',re)
mc.incr('num','9')
re = mc.get('num')
print('我是加上新增後的值',re)
mc.decr('num','5')
re = mc.get('num')
print('我是減去的值',re)
我是沒加過的值 1
我是加上新增後的值 10
是減去的值 5
11、鎖機制:gets cas
import memcache
mc = memcache.Client(['0.0.0.0:12000'],cache_cas=True)
mc.set('count','10')
reget = mc.get('count')
print('件數',reget)
regets = mc.gets('count')
print(regets)
下面的設置將會執行失敗,剖出異常,從而避免非正常數據的產生
recas = mc.cas('count','11')
print(recas)
regets = mc.gets('count')
print('修改',regets)
⑥ 利用Python進行數據分析(10)-移動窗口函數
Python-for-data-移動窗口函數
本文中介紹的是 ,主要的運算元是:
統計和通過其他移動窗口或者指數衰減而運行的函數,稱之為 移動窗口函數
<style scoped="">.dataframe tbody tr th:only-of-type { vertical-align: middle; } <pre><code>.dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; } </code></pre></style>
2292 rows × 3 columns
rolling運算元,行咐肆為和resample和groupby類似
rolling可以在S或者DF上通過銷陵一個window進行調用
<style scoped="">.dataframe tbody tr th:only-of-type { vertical-align: middle; } <pre><code>.dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; } </code></pre></style>
2292 rows × 3 columns
指定一個常數衰減因子為觀測值提供更多的權重。常用指定衰減因子的方法:使用span(跨度)衡斗轎
一些統計運算元,例如相關度和協方差等需要同時操作兩個時間序列。
例如,金融分析中的股票和基準指數的關聯性問題:計算時間序列的百分比變化pct_change()
<style scoped="">.dataframe tbody tr th:only-of-type { vertical-align: middle; } <pre><code>.dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; } </code></pre></style>
在rolling及其相關方法上使用apply方法提供了一種在移動窗口中應用自己設計的數組函數的方法。
唯一要求:該函數從每個數組中產生一個單值(縮聚),例如使用rolling()...quantile(q)計算樣本的中位數
⑦ Python 數據處理(二十四)—— 索引和選擇
如果你想獲取 'A' 列的第 0 和第 2 個元素,你可以這樣做:
這也可以用 .iloc 獲取,通過使用位置索引來選擇內容
可以使用 .get_indexer 獲取多個索引:
警告 :
對於包含一個或多個缺失標簽的列表,使用 .loc 或 [] 將不再重新索引,而是使用 .reindex
在以前的版本中,只要索引列表中存在至少一個有效標簽,就可以使用 .loc[list-of-labels]
但是現在,只要索引列表中存在缺失的標簽將引發 KeyError 。推薦的替代方法是使用 .reindex() 。
例如
索引列表的標簽都存在
先前的版本
但是,現在
索引標簽列表中包含不存在的標簽,使用 reindex
另外,如果你只想選擇有效的鍵,可以使用下面的方法,同時保留了數據的 dtype
對於 .reindex() ,如果有重復的索引將會引發異常
通常,您可以將所需的標簽與當前軸做交集,然後重新索引
但是,如果你的索引結果包含重復標簽,還是會引發異常
使用 sample() 方法可以從 Series 或 DataFrame 中隨機選擇行或列。
該方法默認會對行進行采樣,並接受一個特定的行數、列數,或數據子集。
默認情況下, sample 每行最多返回一次,但也可以使用 replace 參數進行替換采樣
默認情況下,每一行被選中的概率相等,但是如果你想讓每一行有不同的概率,你可以為 sample 函數的 weights 參數設置抽樣權值
這些權重可以是一個列表、一個 NumPy 數組或一個 Series ,但它們的長度必須與你要抽樣的對象相同。
缺失的值將被視為權重為零,並且不允許使用 inf 值。如果權重之和不等於 1 ,則將所有權重除以權重之和,將其重新歸一化。例如
當應用於 DataFrame 時,您可以通過簡單地將列名作為字元串傳遞給 weights 作為采樣權重(前提是您要采樣的是行而不是列)。
sample 還允許用戶使用 axis 參數對列進行抽樣。
最後,我們還可以使用 random_state 參數為 sample 的隨機數生成器設置一個種子,它將接受一個整數(作為種子)或一個 NumPy RandomState 對象
當為該軸設置一個不存在的鍵時, .loc/[] 操作可以執行放大
在 Series 的情況下,這實際上是一個追加操作
可以通過 .loc 在任一軸上放大 DataFrame
這就像 DataFrame 的 append 操作
由於用 [] 做索引必須處理很多情況(單標簽訪問、分片、布爾索引等),所以需要一些開銷來搞清楚你的意圖
如果你只想訪問一個標量值,最快的方法是使用 at 和 iat 方法,這兩個方法在所有的數據結構上都實現了
與 loc 類似, at 提供了基於標簽的標量查找,而 iat 提供了基於整數的查找,與 iloc 類似
同時,你也可以根據這些索引進行設置值
如果索引標簽不存在,會放大數據
另一種常見的操作是使用布爾向量來過濾數據。運算符包括:
|(or) 、 &(and) 、 ~ (not)
這些必須用括弧來分組,因為默認情況下, Python 會將 df['A'] > 2 & df['B'] < 3 這樣的表達式評估為 df['A'] > (2 & df['B']) < 3 ,而理想的執行順序是 (df['A'] > 2) & (df['B'] < 3)
使用一個布爾向量來索引一個 Series ,其工作原理和 NumPy ndarray 一樣。
您可以使用一個與 DataFrame 的索引長度相同的布爾向量從 DataFrame 中選擇行
列表推導式和 Series 的 map 函數可用於產生更復雜的標准
我們可以使用布爾向量結合其他索引表達式,在多個軸上索引
iloc 支持兩種布爾索引。如果索引器是一個布爾值 Series ,就會引發異常。
例如,在下面的例子中, df.iloc[s.values, 1] 是正確的。但是 df.iloc[s,1] 會引發 ValueError 。
⑧ 利用Python處理Excel數據
如果數據沒有標題行,可用pandas添加默認的列名
不讀取哪裡數據,可用答沒灶skiprows=[i],跳過文件的第i行不讀取
第一次出現的保留,其餘刪除
最後一次出現的保留,其餘刪除
** 對客戶聊天記錄進行分組 **
** 對符合多個條件進行清扮分組**
需要對每一行進行權重設置,列錶行數少可行,過多不可行
假設有4行數據,設置采樣權重
自動生成數據的數量,均值,標准差等數據
相關系數在-1到1之間,接近1為正相關,接察拿近-1為負相關,0為不相關
參考書籍:
《利用pythonj進行數據分析》
《從Excel到Python——數據分析進階指南》
⑨ 如何用python實現網路圖節點權重的添加以及如何把一個非連通的大網路圖分成多個小網路圖
networkx是python的一個庫,它為圖的數據結構提供演算法、生成器以及畫圖工具。近日在使用ryu進行最短路徑獲取,可以通過該庫來簡化工作量。該庫採用函數方式進行調用相應的api,其參數類型通常為圖對象。
函數API的調用,按照以下步驟來創建構建圖:
1.networkx的載入
在python中調用networkx通常只需要將該庫導入即可
import networkx as nx
2.圖對象的創建
networkx提供了四種基本圖對象:Graph,DiGraph,MultiGraph,MultiDiGraph。
使用如下調用方式,可以創建以上四種圖對象的空圖。
G=nx.Graph()
G=nx.DiGraph()
G=nx.MultiGraph()
G=nx.MultiDiGraph()
在 networkx中,圖的各個節點允許以哈希表對象來表示,而對於圖中邊的各個參量,則可以通過與邊相關聯的方式來標識,一般而言,對於權重,用weight作為keyword,而對於其他的參數,使用者可以採用任何除weight以外的keyword來命名。
3.在2中,創建的只是一副空圖,為了得到一個有節點、有邊的圖,一般採用下面這個函數:
1
2
G.add_edge(1,2) #default edge data=1
G.add_edge(1,2) #specify edge data=0.9
add_edge()函數,該函數在調用時需要傳入兩個參數u和v,以及多個可選參數
u和v即圖中的兩個節點,如果圖中不存在節點,在調用時會自動將這兩個節點添加入內,同時構建兩個節點之間的連接關系,可選參數通常指這條邊的權重等關系參量。需要注意的是,如果圖中已經存在了這條邊,重新進行添加時會對這條邊進行跟新操作(也就是覆蓋了原有的信息)。
對於該函數,除了上述的構建方式以外,還有以下幾種方式來創建邊:
1
2
3
G.add_edge(*e) # single edge as tuple of two nodes
G.add_edge(1, 3, weight=7, capacity=15, length=342.7) #using many arguements to create edge
G.add_edges_from( [(1, 2)] ) # add edges from iterable container
有時候,當採用默認方式創建邊以後,我們可能還會往邊裡面添加邊的相關參數,這時候,可以採用下面的方式來更新邊的信息:
1
2
3
4
5
#For non-string attribute keys, use subscript notation.
G.add_edge(1, 2)
G[1][2].update({0: 5}) #更新邊的信息
G.edges[1, 2].update({0: 5}) #更新邊的信息
#上述兩種更新方式,擇一選取即可
細心的朋友可能注意到我在寫創建圖的內容的時候,提到了add_edges_from()函數,該函數也是用來創建邊的,該方式與add_edges()略有不同,比之add_edges()採用一個一個節點的方式進行創建,它來的更為便利。這個函數在調用時,需要一個節點元組作為參數以及多個可選參數作為邊的信息。你可以這么傳遞:
默認創建節點之間的邊:
1
G.add_edges_from([(u,v)])
也可以這么寫,在創建的同時添加信息:
1
G.add_edges_from([(3, 4), (1, 4)], label='WN2898')
通過上述方式,就構建了一個3-4-1的圖的連接,並給每條邊打上了標簽。
由此你就可以創建出自己的圖模型了。
⑩ 怎麼用python 計算權重
用numpy,scipy等。 安裝後 1 2 import numpy import scipy 便可以進念襲行線仔褲兄性代數矩陣運算,純明統計運算等。