教你在windows10環境下如何安裝minepy並成功運行!


在學習使用sklearn做單機特征工程這篇文章時,發現在計算互信息時from minepy import MINE代碼運行出錯ModuleNotFoundError: No module named 'minepy'

原文部分如下:

3.1.4 互信息法

經典的互信息也是評價定性自變量定性因變量的相關性的,互信息計算公式如下:

為了處理定量數據,最大信息系數法被提出,使用feature_selection庫的SelectKBest類結合最大信息系數法來選擇特征的代碼如下:

from sklearn.feature_selection import SelectKBest
from minepy import MINE

#由於MINE的設計不是函數式的,定義mic方法將其為函數式的,返回一個二元組,二元組的第2項設置成固定的P值0.5
def mic(x, y):
    m = MINE()
    m.compute_score(x, y)
    return (m.mic(), 0.5)

#選擇K個最好的特征,返回特征選擇后的數據
SelectKBest(lambda X, Y: array(map(lambda x:mic(x, Y), X.T)).T, k=2).fit_transform(iris.data, iris.target)

運行結果

  • 錯誤1:
ModuleNotFoundError: No module named 'minepy'
  • 錯誤2:

先解決錯誤1

根據ModuleNotFoundError: No module named 'minepy'提示,缺少minepy模塊,於是到Anaconda(或者cmd)下執行命令pip3 install minepy


發現又缺少編譯器——Visual C++ Build Tools(注:這個是微軟為 Python 3.5 提供的編譯器),看出錯結果顯示:

error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": http://landinghub.visualstudio.com/visual-cpp-build-tools

好嘛,為了安裝minepy竟然還要安裝Visual C++ Build Tools,麻不麻煩啊?

機智的我趕緊去Unofficial Windows Binaries for Python Extension Packages找找看,這個網站包含了很多Python擴展包的非官方Windows二進制文件,還真有minepy

把它下載下來后,我把它拷貝到了E:\Python3.6\Scripts文件夾里面,在該路徑運行cmd命令pip3 install minepy-1.2.2-cp36-cp36m-win_amd64.whl,成功安裝。

在Anaconda的Prompt中直接用命令:pip3 install E:\Python3.6\Scripts\minepy-1.2.2-cp36-cp36m-win_amd64.whl,也成功安裝。

注意:下載的minepy-1.2.2-cp36-cp36m-win_amd64.whl可以保存到任何文件夾地方,只需要在該路徑下運行cmd,然后運行pip3 install minepy-1.2.2-cp36-cp36m-win_amd64.whl,一樣可以成功安裝。

參考資料:

再解決錯誤2

  • 只要改成:SelectKBest(lambda X, Y: list(array([pearsonr(x, Y) for x in X.T]).T), k=2).fit_transform(iris.data, iris.target)即可
from sklearn.feature_selection import SelectKBest
from minepy import MINE

#由於MINE的設計不是函數式的,定義mic方法將其為函數式的,返回一個二元組,二元組的第2項設置成固定的P值0.5
def mic(x, y):
    m = MINE()
    m.compute_score(x, y)
    return (m.mic(), 0.5)
'''
compute_score(x, y)
Computes the maximum normalized mutual information scores between x and y.
計算x和y之間的最大標准化互信息分數。
'''
#選擇K個最好的特征,返回特征選擇后的數據
SelectKBest(lambda X, Y: list(array([pearsonr(x, Y) for x in X.T]).T), k=2).fit_transform(iris.data, iris.target)
# 或 SelectKBest(lambda X, Y: array(list(map(lambda x:mic(x, Y), X.T))).T[0], k=2).fit_transform(iris.data, iris.target)
  • 運行結果:

運行成功,全部搞定!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM