『壹』 auc 論文里的 怎麼計算 python svm
利用Python畫ROC曲線,以及AUC值的計算\
前言
ROC(Receiver Operating Characteristic)曲線和AUC常被用來評價一個二值分類器(binary classifier)的優劣。這篇文章將先簡單的介紹ROC和AUC,而後用實例演示如何python作出ROC曲線圖以及計算AUC。
AUC介紹
AUC(Area Under Curve)是機器學習二分類模型中非常常用的評估指標,相比於F1-Score對項目的不平衡有更大的容忍性,目前常見的機器學習庫中(比如scikit-learn)一般也都是集成該指標的計算,但是有時候模型是單獨的或者自己編寫的,此時想要評估訓練模型的好壞就得自己搞一個AUC計算模塊,本文在查詢資料時發現libsvm-tools有一個非常通俗易懂的auc計算,因此摳出來用作日後之用。
AUC計算
AUC的計算分為下面三個步驟:
1、計算數據的准備,如果模型訓練時只有訓練集的話一般使用交叉驗證的方式來計算,如果有評估集(evaluate)一般就可以直接計算了,數據的格式一般就是需要預測得分以及其目標類別(注意是目標類別,不是預測得到的類別)
2、根據閾值劃分得到橫(X:False Positive Rate)以及縱(Y:True Positive Rate)點
3、將坐標點連成曲線之後計算其曲線下面積,就是AUC的值
直接上python代碼
#! -*- coding=utf-8 -*-
import pylab as pl
from math import log,exp,sqrt
evaluate_result="you file path"
db = [] #[score,nonclk,clk]
pos, neg = 0, 0
with open(evaluate_result,'r') as fs:
for line in fs:
nonclk,clk,score = line.strip().split('\t')
nonclk = int(nonclk)
clk = int(clk)
score = float(score)
db.append([score,nonclk,clk])
pos += clk
neg += nonclk
db = sorted(db, key=lambda x:x[0], reverse=True)
#計算ROC坐標點
xy_arr = []
tp, fp = 0., 0.
for i in range(len(db)):
tp += db[i][2]
fp += db[i][1]
xy_arr.append([fp/neg,tp/pos])
#計算曲線下面積
auc = 0.
prev_x = 0
for x,y in xy_arr:
if x != prev_x:
auc += (x - prev_x) * y
prev_x = x
print "the auc is %s."%auc
x = [_v[0] for _v in xy_arr]
y = [_v[1] for _v in xy_arr]
pl.title("ROC curve of %s (AUC = %.4f)" % ('svm',auc))
pl.xlabel("False Positive Rate")
pl.ylabel("True Positive Rate")
pl.plot(x, y)# use pylab to plot x and y
pl.show()# show the plot on the screen
輸入的數據集可以參考svm預測結果
其格式為:
nonclk \t clk \t score
其中:
1、nonclick:未點擊的數據,可以看做負樣本的數量
2、clk:點擊的數量,可以看做正樣本的數量
3、score:預測的分數,以該分數為group進行正負樣本的預統計可以減少AUC的計算量
運行的結果為:
如果本機沒安裝pylab可以直接注釋依賴以及畫圖部分
注意
上面貼的代碼:
1、只能計算二分類的結果(至於二分類的標簽隨便處理)
2、上面代碼中每個score都做了一次閾值,其實這樣效率是相當低的,可以對樣本進行采樣或者在計算橫軸坐標時進行等分計算
『貳』 python matplotlib怎麼用
使用python的包matplotlib來畫圖
瀏覽:255
|
更新:
2015-10-24 22:10
1
2
3
4
5
6
7
分步閱讀
python中的matplotlib可以很快的幫助我們作出圖,
為此我們給出matplotlib的安裝步驟和一個小例子來展示其功能
工具/原料
python3.4
numpy包
matplotlib包
依賴包:pyparsing、dateutil、scipy
方法/步驟
python安裝(之前寫過一篇關於python的安裝,這里不重復介紹)
(1) 如何下載?網路---> Python官網
(2) 版本:python-3.4.3.amd64 exe文件直接點哦
(3) 目錄:D:\Python34
為python配置了環境變數:D:\Python34\Scripts;D:\Python34
(4) 命令行輸入:python 有反應表示成功
說明:matplotlib還沒有匹配python3.5的版本,我的電腦為64位
0Python安裝學習指南
軟體包下載:
因為涉及到眾多包的下載,以及其中的版本和電腦位數問題特介紹如下( 注意加粗的字體):
(1) numpy numpy-1.10.1+mkl-cp34-none-win_amd64.whl
(2) matplotlib matplotlib-1.4.3.win-amd64-py3.4b/matplotlib-1.4.3/windows/
(3) 依賴包:pyparsing、dateutil、scipy
聲明:以上軟體地址可自行網路搜索
附註:圖一為matplotlib 、圖二為numpy 下載界面的選擇
軟體包numpy的安裝:
1 命令行輸入【完整的路徑=numpy 在你電腦的絕對路徑】
pip install 完整的路徑\numpy -1.10.1+mkl-cp34-none-win_amd64.
2 驗證:python編輯下 python>>
from numpy import *
安裝matplotlib:
matplotlib-1.4.3.win-amd64-py3.4
因為下載的是exe文件,點擊一路執行即可
依賴包的安裝:
在命令行里逐行輸入如下命令:軟體包的絕對路徑
1 pip install 絕對路徑\pyparsing-2.0.3-py3-none-any.whl
2 pip install 絕對路徑\python_dateutil-2.4.2-py2.py3-none-any.whl
3 pip install 絕對路徑\matplotlib依賴\scipy-0.16.0-cp34-none-win_amd64.whl
驗證是否安裝成功:
1 在python編輯狀態下導入安裝的包:
import matplotlib
import numpy
import scipy
import pyparsing
import matplotlib.pyplot as plt
2 如果缺少six
在安裝完畢scipy之後把../Python34/Lib/site-packages/scipy/lib中的six.py six.pyc six.pyo三個文件拷貝到.../Python34/Lib/site-packages
案例1:
import matplotlib.pyplot as plt
x = [0, 1, 2, 3, 4, 5]
y = [0.1, 0.2, 0.2, 0.3, 0.2, 0.1]
y2 = [0.2, 0.2, 0.3, 0.2, 0.3, 0]
plt.plot(x, y, 'b', x, y2, 'g')
plt.show()
案例2:
import matplotlib.pyplot as plt
import math
x=[]
y=[]
num=0.0
while num < math.pi * 4:
y.append(math.sin(num))
x.append(num)
num += 0.1
plt.plot(x, y, 'b')
plt.show()
如果
『叄』 python一共有多少庫
導讀:本篇文章首席CTO筆記來給大家介紹有關python一共有多少庫的相關內容,希望對大家有所幫助,一起來看看吧。
python庫有哪些Python比較常見的庫有:Arrow、Behold、Click、Numba、Matlibplot、Pillow等:
1、Arrow
Python中處理時間的庫有datetime,但是它過於簡單,使用起來不夠方便和智能,而Arrow可以說非常的方便和智能。它可以輕松地定位幾個小時之前的時間,可以輕松轉換時區時間,對於一個小時前,2個小時之內這樣人性化的信息也能夠准確解讀。
2、Behold
調試程序是每個程序員必備的技能,對於腳本語言,很多人習慣於使用print進行調試,然而對於大項目來說,print的功能還遠遠不足,我們希望有一個可以輕松使用,調試方便,對變數監視完整,格式已於查看的工具,而Behold就是那個非常好用的調試庫。
3、Click
現在幾乎所有的框架都有自己的命令行腳手架,Python也不例外,那麼如何快速開發出屬於自己的命令行程序呢?答案就是使用Python的Click庫。Click庫對命令行api進行了大量封裝,你可以輕松開發出屬於自己的CLI命令集。終端的顏色,環境變數信息,通過Click都可以輕松進行獲取和改變。
4、Numba
如果你從事數學方面的分析和計算,那麼Numba一定是你必不可少的庫。Numpy通過將高速C庫包裝在Python介面中來工作,而Cython使用可選的類型將Python編譯為C以提高性能。但是Numba無疑是最方便的,因為它允許使用裝飾器選擇性地加速Python函數。
5、Matlibplot
做過數據分析,數據可視化的數學學生一定知道matlab這個軟體,這是一個收費的數學商用軟體,在Python中,Matlibplot就是為了實現這個軟體中功能開發的第三方Python庫。並且它完全是免費的,很多學校都是用它來進行數學教學和研究的。
6、Pillow
圖像處理是任何時候我們都需要關注的問題,平時我們看到很多ps中的神技,比如調整畫面顏色,飽和度,調整圖像尺寸,裁剪圖像等等,這些其實都可以通過Python簡單完成,而其中我們需要使用的庫就是Pillow。
7、pyqt5
Python是可以開發圖形界面程序的。而pyqt就是一款非常好用的第三方GUI庫,有了它,你可以輕松開發出跨平台的圖形應用程序,其中qtdesigner設計器,更是加速了我們開發圖形界面的速度。
除了上述介紹的之外,Python還有很多庫,比如:Pandas、NumPy、SciPy、Seaborn、Keras等。
在python中一共有多少個標准庫?Python語言官方的參考手冊鍾,介紹了與Python一同發行的標准庫。
文本處理服務
string?---常見的字元串操作
re?---正則表達式操作
difflib?---計算差異的輔助工具
textwrap?---文本自動換行與填充
unicodedata?---Unicode資料庫
stringprep?---網際網路字元串預備
readline?---GNUreadline介面
rlcompleter?---GNUreadline的補全函數
二進制數據服務
struct?---將位元組串解讀為打包的二進制數據
codecs?---編解碼器注冊和相關基類
數據類型
datetime?---基本日期和時間類型
zoneinfo?---IANA時區支持
calendar?---日歷相關函數
collections?---容器數據類型
collections.abc?---容器的抽象基類
heapq?---堆隊列演算法
bisect?---數組二分查找演算法
array?---高效的數值數組
weakref?---弱引用
types?---動態類型創建和內置類型名稱
?---淺層(shallow)和深層(deep)復制操作
pprint?---數據美化輸出
reprlib?---另一種?repr()?實現
enum?---對枚舉的支持
graphlib?---操作類似圖的結構的功能
數字和數學模塊
numbers?---數字的抽象基類
math?---數學函數
cmath?---關於復數的數學函數
decimal?---十進制定點和浮點運算
fractions?---分數
random?---生成偽隨機數
statistics?---數學統計函數
函數式編程模塊
itertools?---為高效循環而創建迭代器的函數
functools?---高階函數和可調用對象上的操作
operator?---標准運算符替代函數
文件和目錄訪問
pathlib?---面向對象的文件系統路徑
os.path?---常用路徑操作
fileinput?---迭代來自多個輸入流的行
stat?---解析?stat()?結果
filecmp?---文件及目錄的比較
tempfile?---生成臨時文件和目錄
glob?---Unix風格路徑名模式擴展
fnmatch?---Unix文件名模式匹配
linecache?---隨機讀寫文本行
shutil?---高階文件操作
數據持久化
pickle?---Python對象序列化
reg?---注冊配合?pickle?模塊使用的函數
shelve?---Python對象持久化
marshal?---內部Python對象序列化
dbm?---Unix"資料庫"介面
sqlite3?---SQLite資料庫DB-API2.0介面模塊
數據壓縮和存檔
zlib?---與?gzip?兼容的壓縮
gzip?---對?gzip?格式的支持
bz2?---對?bzip2?壓縮演算法的支持
lzma?---用LZMA演算法壓縮
zipfile?---使用ZIP存檔
tarfile?---讀寫tar歸檔文件
文件格式
csv?---CSV文件讀寫
configparser?---配置文件解析器
tomllib?---ParseTOMLfiles
netrc?---netrc文件處理
plistlib?---生成與解析Apple?.plist?文件
加密服務
hashlib?---安全哈希與消息摘要
hmac?---基於密鑰的消息驗證
secrets?---生成管理密碼的安全隨機數
通用操作系統服務
os?---多種操作系統介面
io?---處理流的核心工具
time?---時間的訪問和轉換
argparse?---命令行選項、參數和子命令解析器
getopt?---C風格的命令行選項解析器
logging?---Python的日誌記錄工具
logging.config?---日誌記錄配置
logging.handlers?---日誌處理程序
getpass?---攜帶型密碼輸入工具
curses?---終端字元單元顯示的處理
curses.textpad?---用於curses程序的文本輸入控制項
curses.ascii?---用於ASCII字元的工具
curses.panel?---curses的面板棧擴展
platform?---獲取底層平台的標識數據
errno?---標准errno系統符號
ctypes?---Python的外部函數庫
並發執行
threading?---基於線程的並行
multiprocessing?---基於進程的並行
multiprocessing.shared_memory?---
concurrent?包
concurrent.futures?---啟動並行任務
subprocess?---子進程管理
sched?---事件調度器
queue?---一個同步的隊列類
contextvars?---上下文變數
_thread?---底層多線程API
網路和進程間通信
asyncio?---非同步I/O
socket?---底層網路介面
ssl?---套接字對象的TLS/SSL包裝器
select?---等待I/O完成
selectors?---高級I/O復用庫
signal?---設置非同步事件處理程序
mmap?---內存映射文件支持
互聯網數據處理
email?---電子郵件與MIME處理包
json?---JSON編碼和解碼器
mailbox?---操作多種格式的郵箱
mimetypes?---映射文件名到MIME類型
base64?---Base16,Base32,Base64,Base85數據編碼
binascii?---二進制和ASCII碼互轉
quopri?---編碼與解碼經過MIME轉碼的可列印數據
結構化標記處理工具
html?---超文本標記語言支持
html.parser?---簡單的HTML和XHTML解析器
html.entities?---HTML一般實體的定義
XML處理模塊
xml.etree.ElementTree?---ElementTreeXMLAPI
xml.dom?---文檔對象模型API
xml.dom.minidom?---最小化的DOM實現
xml.dom.pulldom?---支持構建部分DOM樹
xml.sax?---支持SAX2解析器
xml.sax.handler?---SAX處理句柄的基類
xml.sax.saxutils?---SAX工具集
xml.sax.xmlreader?---用於XML解析器的介面
xml.parsers.expat?---使用Expat的快速XML解析
互聯網協議和支持
webbrowser?---方便的Web瀏覽器控制工具
wsgiref?---WSGI工具和參考實現
urllib?---URL處理模塊
urllib.request?---用於打開URL的可擴展庫
urllib.response?---urllib使用的Response類
urllib.parse?用於解析URL
urllib.error?---urllib.request引發的異常類
urllib.robotparser?---robots.txt語法分析程序
http?---HTTP模塊
http.client?---HTTP協議客戶端
ftplib?---FTP協議客戶端
poplib?---POP3協議客戶端
imaplib?---IMAP4協議客戶端
smtplib?---SMTP協議客戶端
uuid?---?RFC4122?定義的UUID對象
socketserver?---用於網路伺服器的框架
http.server?---HTTP伺服器
http.cookies?---HTTP狀態管理
http.cookiejar?——HTTP客戶端的Cookie處理
xmlrpc?---XMLRPC服務端與客戶端模塊
xmlrpc.client?---XML-RPC客戶端訪問
xmlrpc.server?---基本XML-RPC伺服器
ipaddress?---IPv4/IPv6操作庫
多媒體服務
wave?---讀寫WAV格式文件
colorsys?---顏色系統間的轉換
國際化
gettext?---多語種國際化服務
locale?---國際化服務
程序框架
turtle?---海龜繪圖
cmd?---支持面向行的命令解釋器
shlex?——簡單的詞法分析
Tk圖形用戶界面(GUI)
tkinter?——Tcl/Tk的Python介面
tkinter.colorchooser?---顏色選擇對話框
tkinter.font?---Tkinter字體封裝
Tkinter對話框
tkinter.messagebox?---Tkinter消息提示
tkinter.scrolledtext?---滾動文字控制項
tkinter.dnd?---拖放操作支持
tkinter.ttk?---Tk風格的控制項
tkinter.tix?---TK擴展包
Python常用的標准庫以及第三方庫有哪些?推薦5個常用的Python標准庫:
1、os:提供了不少與操作系統相關聯的函數庫
os包是Python與操作系統的介面。我們可以用os包來實現操作系統的許多功能,比如管理系統進程,改變當前路徑,改變文件許可權等。但要注意,os包是建立在操作系統的平台上的,許多功能在Windows系統上是無法實現的。另外,在使用os包中,要注意其中的有些功能已經被其他的包取代。
我們通過文件系統來管理磁碟上儲存的文件。查找、刪除、復制文件以及列出文件列表等都是常見的文件操作。這些功能通常可以在操作系統中看到,但現在可以通過Python標准庫中的glob包、shutil包、os.path包以及os包的一些函數等,在Python內部實現。
2、sys:通常用於命令行參數的庫
sys包被用於管理Python自身的運行環境。Python是一個解釋器,也是一個運行在操作系統上的程序。我們可以用sys包來控制這一程序運行的許多參數,比如說Python運行所能占據的內存和CPU,Python所要掃描的路徑等。另一個重要功能是和Python自己的命令行互動,從命令行讀取命令和參數。
3、random:用於生成隨機數的庫
Python標准庫中的random函數,可以生成隨機浮點數、整數、字元串,甚至幫助你隨機選擇列表序列中的一個元素,打亂一組數據等。
4、math:提供了數學常數和數學函數
標准庫中,Python定義了一些新的數字類型,以彌補之前的數字類型可能的不足。標准庫還包含了random包,用於處理隨機數相關的功能。math包補充了一些重要的數學常數和數學函數,比如pi、三角函數等等。
5、datetime:日期和時間的操作庫
日期和時間的管理並不復雜,但容易犯錯。Python的標准庫中對日期和時間的管理頗為完善,你不僅可以進行日期時間的查詢和變換,還可以對日期時間進行運算。通過這些標准庫,還可以根據需要控制日期時間輸出的文本格式
結語:以上就是首席CTO筆記為大家介紹的關於python一共有多少庫的全部內容了,希望對大家有所幫助,如果你還想了解更多這方面的信息,記得收藏關注本站。
『肆』 數據分析工具有哪些 python
IPython
IPython 是一個在多種編程語言之間進行交互計算的命令行 shell,最開始是用 python 開發的,提供增強的內省,富媒體,擴展的 shell
語法,tab 補全,豐富的歷史等功能。IPython 提供了如下特性:
更強的交互 shell(基於 Qt 的終端)
一個基於瀏覽器的記事本,支持代碼,純文本,數學公式,內置圖表和其他富媒體
支持交互數據可視化和圖形界面工具
靈活,可嵌入解釋器載入到任意一個自有工程里
簡單易用,用於並行計算的高性能工具
由數據分析總監,Galvanize 專家 Nir Kaldero 提供。
GraphLab Greate 是一個 Python 庫,由 C++ 引擎支持,可以快速構建大型高性能數據產品。
這有一些關於 GraphLab Greate 的特點:
可以在您的計算機上以交互的速度分析以 T 為計量單位的數據量。
在單一平台上可以分析表格數據、曲線、文字、圖像。
最新的機器學習演算法包括深度學習,進化樹和 factorization machines 理論。
可以用 Hadoop Yarn 或者 EC2 聚類在你的筆記本或者分布系統上運行同樣的代碼。
藉助於靈活的 API 函數專注於任務或者機器學習。
在雲上用預測服務便捷地配置數據產品。
為探索和產品監測創建可視化的數據。
由 Galvanize 數據科學家 Benjamin Skrainka 提供。
Pandas
pandas 是一個開源的軟體,它具有 BSD 的開源許可,為 Python
編程語言提供高性能,易用數據結構和數據分析工具。在數據改動和數據預處理方面,Python 早已名聲顯赫,但是在數據分析與建模方面,Python
是個短板。Pands 軟體就填補了這個空白,能讓你用 Python 方便地進行你所有數據的處理,而不用轉而選擇更主流的專業語言,例如 R 語言。
整合了勁爆的 IPyton 工具包和其他的庫,它在 Python 中進行數據分析的開發環境在處理性能,速度,和兼容方面都性能卓越。Pands
不會執行重要的建模函數超出線性回歸和面板回歸;對於這些,參考 statsmodel 統計建模工具和 scikit-learn 庫。為了把 Python
打造成頂級的統計建模分析環境,我們需要進一步努力,但是我們已經奮斗在這條路上了。
由 Galvanize 專家,數據科學家 Nir Kaldero 提供。
PuLP
線性編程是一種優化,其中一個對象函數被最大程度地限制了。PuLP 是一個用 Python
編寫的線性編程模型。它能產生線性文件,能調用高度優化的求解器,GLPK,COIN CLP/CBC,CPLEX,和GUROBI,來求解這些線性問題。
由 Galvanize 數據科學家 Isaac Laughlin 提供
Matplotlib
matplotlib 是基於 Python 的
2D(數據)繪圖庫,它產生(輸出)出版級質量的圖表,用於各種列印紙質的原件格式和跨平台的互動式環境。matplotlib 既可以用在 python 腳本,
python 和 ipython 的 shell 界面 (ala MATLAB? 或 Mathematica?),web 應用伺服器,和6類 GUI
工具箱。
matplotlib 嘗試使容易事情變得更容易,使困難事情變為可能。你只需要少量幾行代碼,就可以生成圖表,直方圖,能量光譜(power
spectra),柱狀圖,errorcharts,散點圖(scatterplots)等,。
為簡化數據繪圖,pyplot 提供一個類 MATLAB 的介面界面,尤其是它與 IPython
共同使用時。對於高級用戶,你可以完全定製包括線型,字體屬性,坐標屬性等,藉助面向對象介面界面,或項 MATLAB 用戶提供類似(MATLAB)的界面。
Galvanize 公司的首席科學官 Mike Tamir 供稿。
Scikit-Learn
Scikit-Learn 是一個簡單有效地數據挖掘和數據分析工具(庫)。關於最值得一提的是,它人人可用,重復用於多種語境。它基於
NumPy,SciPy 和 mathplotlib 等構建。Scikit 採用開源的 BSD 授權協議,同時也可用於商業。Scikit-Learn
具備如下特性:
分類(Classification) – 識別鑒定一個對象屬於哪一類別
回歸(Regression) – 預測對象關聯的連續值屬性
聚類(Clustering) – 類似對象自動分組集合
降維(Dimensionality Rection) – 減少需要考慮的隨機變數數量
模型選擇(Model Selection) –比較、驗證和選擇參數和模型
預處理(Preprocessing) – 特徵提取和規范化
Galvanize 公司數據科學講師,Isaac Laughlin提供
Spark
Spark 由一個驅動程序構成,它運行用戶的 main 函數並在聚類上執行多個並行操作。Spark
最吸引人的地方在於它提供的彈性分布數據集(RDD),那是一個按照聚類的節點進行分區的元素的集合,它可以在並行計算中使用。RDDs 可以從一個 Hadoop
文件系統中的文件(或者其他的 Hadoop 支持的文件系統的文件)來創建,或者是驅動程序中其他的已經存在的標量數據集合,把它進行變換。用戶也許想要 Spark
在內存中永久保存 RDD,來通過並行操作有效地對 RDD 進行復用。最終,RDDs 無法從節點中自動復原。
Spark 中第二個吸引人的地方在並行操作中變數的共享。默認情況下,當 Spark
在並行情況下運行一個函數作為一組不同節點上的任務時,它把每一個函數中用到的變數拷貝一份送到每一任務。有時,一個變數需要被許多任務和驅動程序共享。Spark
支持兩種方式的共享變數:廣播變數,它可以用來在所有的節點上緩存數據。另一種方式是累加器,這是一種只能用作執行加法的變數,例如在計數器中和加法運算中。