⑴ python中的sklearn中決策樹使用的是哪一種演算法
1首先需要安裝Cython,網上下載後進行本地安裝pythonsetup.pyinstall2下載Sklearn包,進行本地安裝(使用pip或easy_install總是出錯,如cannotimportmurmurhash3_32,最終本地安裝成功)3安裝後可用nosetests-vsklearn來進行測試
⑵ 如何設計並實現一個線程安全的 Map
Map 是一個非常常用的數據結構,一個無序的 key/value 對的集合,其中 Map 所有的 key 都是不同的,然後通過給定的 key 可以在常數時間 O(1) 復雜度內查找、更新或刪除對應的 value。
要想實現常數級的查找,應該用什麼來實現呢?讀者應該很快會想到哈希表。確實,Map 底層一般都是使用數組來實現,會借用哈希演算法輔助。對於給定的 key,一般先進行 hash 操作,然後相對哈希表的長度取模,將 key 映射到指定的地方。
哈希演算法有很多種,選哪一種更加高效呢?
1. 哈希函數
MD5 和 SHA1 可以說是目前應用最廣泛的 Hash 演算法,而它們都是以 MD4 為基礎設計的。
MD4(RFC 1320) 是 MIT 的Ronald L. Rivest 在 1990 年設計的,MD 是 Message Digest(消息摘要) 的縮寫。它適用在32位字長的處理器上用高速軟體實現——它是基於 32位操作數的位操作來實現的。
MD5(RFC 1321) 是 Rivest 於1991年對 MD4 的改進版本。它對輸入仍以512位分組,其輸出是4個32位字的級聯,與 MD4 相同。MD5 比 MD4 來得復雜,並且速度較之要慢一點,但更安全,在抗分析和抗差分方面表現更好。
SHA1 是由 NIST NSA 設計為同 DSA 一起使用的,它對長度小於264的輸入,產生長度為160bit 的散列值,因此抗窮舉 (brute-force)
性更好。SHA-1 設計時基於和 MD4 相同原理,並且模仿了該演算法。
常用的 hash 函數有 SHA-1,SHA-256,SHA-512,MD5 。這些都是經典的 hash 演算法。在現代化生產中,還會用到現代的 hash 演算法。下面列舉幾個,進行性能對比,最後再選其中一個源碼分析一下實現過程。
(1) Jenkins Hash 和 SpookyHash
1997年 Bob Jenkins 在《 Dr. Dobbs Journal》雜志上發表了一片關於散列函數的文章《A hash function for hash Table lookup》。這篇文章中,Bob 廣泛收錄了很多已有的散列函數,這其中也包括了他自己所謂的「lookup2」。隨後在2006年,Bob 發布了 lookup3。lookup3 即為 Jenkins Hash。更多有關 Bob』s 散列函數的內容請參閱維基網路:Jenkins hash function。memcached的 hash 演算法,支持兩種演算法:jenkins, murmur3,默認是 jenkins。
2011年 Bob Jenkins 發布了他自己的一個新散列函數
SpookyHash(這樣命名是因為它是在萬聖節發布的)。它們都擁有2倍於 MurmurHash 的速度,但他們都只使用了64位數學函數而沒有32位版本,SpookyHash 給出128位輸出。
(2) MurmurHash
MurmurHash 是一種非加密型哈希函數,適用於一般的哈希檢索操作。
Austin Appleby 在2008年發布了一個新的散列函數——MurmurHash。其最新版本大約是 lookup3 速度的2倍(大約為1 byte/cycle),它有32位和64位兩個版本。32位版本只使用32位數學函數並給出一個32位的哈希值,而64位版本使用了64位的數學函數,並給出64位哈希值。根據Austin的分析,MurmurHash具有優異的性能,雖然 Bob Jenkins 在《Dr. Dobbs article》雜志上聲稱「我預測 MurmurHash 比起lookup3要弱,但是我不知道具體值,因為我還沒測試過它」。MurmurHash能夠迅速走紅得益於其出色的速度和統計特性。當前的版本是MurmurHash3,Redis、Memcached、Cassandra、HBase、Lucene都在使用它。
作者:一縷殤流化隱半邊冰霜
⑶ python機器學習使用sklearn模塊出錯,求解答
Python在科學計算領域,有兩個重要的擴展模塊:Numpy和Scipy。其中Numpy是一個用python實現的科學計算包。包括:一個強大的N維數組對象Array;比較成熟的(廣播)函數庫;用於整合C/C++和Fortran代碼的工具包;實用的線性代數、傅里葉變換和隨機數生成函數。SciPy是一個開源的Python演算法庫和數學工具包,SciPy包含的模塊有最優化、線性代數、積分、插值、特殊函數、快速傅里葉變換、信號處理和圖像處理、常微分方程求解和其他科學與工程中常用的計算。其功能與軟體MATLAB、Scilab和GNUOctave類似。Numpy和Scipy常常結合著使用,Python大多數機器學習庫都依賴於這兩個模塊,繪圖和可視化依賴於matplotlib模塊,matplotlib的風格與matlab類似。Python機器學習庫非常多,而且大多數開源,主要有:1.scikit-learnscikit-learn是一個基於SciPy和Numpy的開源機器學習模塊,包括分類、回歸、聚類系列演算法,主要演算法有SVM、邏輯回歸、樸素貝葉斯、Kmeans、DBSCAN等,目前由INRI資助,偶爾Google也資助一點。
⑷ python中的sklearn中決策樹使用的是哪一種演算法
1首先需要安裝Cython網載進行本安裝pythonsetup.pyinstall
2載Sklearn包進行本安裝(使用pip或easy_install總錯cannotimportmurmurhash3_32終本安裝功)
3安裝用nosetests-vsklearn進行測試
⑸ python中的sklearn中決策樹使用的是哪一種演算法
要弄清楚這個問題,首先要弄懂決策樹三大流行演算法ID3、C4.5和CART的原理,以及sklearn框架下DecisionTreeClassifier的幫助文檔。
3個演算法的主要區別在於度量信息方法、選擇節點特徵還有分支數量的不同。
ID3,採用熵(entropy)來度量信息不確定度,選擇「信息增益」最大的作為節點特徵,它是多叉樹,即一個節點可以有多個分支。
C4.5,同樣採用熵(entropy)來度量信息不確定度,選擇「信息增益比」最大的作為節點特徵,同樣是多叉樹,即一個節點可以有多個分支。
CART,採用基尼指數(Gini index)來度量信息不純度,選擇基尼指數最小的作為節點特徵,它是二叉樹,即一個節點只分兩支。
然後你認真閱讀sklearn的DecisionTreeClassifier的幫助文檔,可以發現,度量信息的方法默認是Gini,但可以改成entropy,請按需選擇;構建的樹是二叉樹;可以通過設置max_deepth、max_leaf等來實現「剪枝」,這是根據CART的損失函數減少的理論進行的。
所以總結說,如果信息度量方法按照默認的設置,那麼sklearn所用的決策樹分類器就是CART,如果改成了entropy,那麼只是使用了別的度量方法而已。其實兩者差不多。
⑹ jedis里怎麼設置數據的有效期
1、下載redis安裝包,解壓後進入redis目錄,執行命令redis-server.exe redis.windows.conf,redis解壓後目錄如圖。
⑺ 常見的哈希演算法有哪些
1.linear hash 線性
2.quadratic hash 每次以1,4,9,16這樣的幅度向下找
3.double hash 用兩個函數一起決定HASH的index