python交叉驗證
❶ python svm 怎麼訓練模型
支持向量機SVM(Support Vector Machine)是有監督的分類預測模型,本篇文章使用機器學習庫scikit-learn中的手寫數字數據集介紹使用Python對SVM模型進行訓練並對手寫數字進行識別的過程。
准備工作
手寫數字識別的原理是將數字的圖片分割為8X8的灰度值矩陣,將這64個灰度值作為每個數字的訓練集對模型進行訓練。手寫數字所對應的真實數字作為分類結果。在機器學習sklearn庫中已經包含了不同數字的8X8灰度值矩陣,因此我們首先導入sklearn庫自帶的datasets數據集。然後是交叉驗證庫,SVM分類演算法庫,繪制圖表庫等。
12345678910#導入自帶數據集from sklearn import datasets#導入交叉驗證庫from sklearn import cross_validation#導入SVM分類演算法庫from sklearn import svm#導入圖表庫import matplotlib.pyplot as plt#生成預測結果准確率的混淆矩陣from sklearn import metrics讀取並查看數字矩陣
從sklearn庫自帶的datasets數據集中讀取數字的8X8矩陣信息並賦值給digits。
12#讀取自帶數據集並賦值給digitsdigits = datasets.load_digits()查看其中的數字9可以發現,手寫的數字9以64個灰度值保存。從下面的8×8矩陣中很難看出這是數字9。
12#查看數據集中數字9的矩陣digits.data[9]以灰度值的方式輸出手寫數字9的圖像,可以看出個大概輪廓。這就是經過切割並以灰度保存的手寫數字9。它所對應的64個灰度值就是模型的訓練集,而真實的數字9是目標分類。我們的模型所要做的就是在已知64個灰度值與每個數字對應關系的情況下,通過對模型進行訓練來對新的手寫數字對應的真實數字進行分類。
1234#繪制圖表查看數據集中數字9的圖像plt.imshow(digits.images[9], cmap=plt.cm.gray_r, interpolation='nearest')plt.title('digits.target[9]')plt.show()
從混淆矩陣中可以看到,大部分的數字SVM的分類和預測都是正確的,但也有個別的數字分類錯誤,例如真實的數字2,SVM模型有一次錯誤的分類為1,還有一次錯誤分類為7。
❷ Python語言下的機器學習庫
Python語言下的機器學習庫
Python是最好的編程語言之一,在科學計算中用途廣泛:計算機視覺、人工智慧、數學、天文等。它同樣適用於機器學習也是意料之中的事。當然,它也有些缺點;其中一個是工具和庫過於分散。如果你是擁有unix思維(unix-minded)的人,你會覺得每個工具只做一件事並且把它做好是非常方便的。但是你也需要知道不同庫和工具的優缺點,這樣在構建系統時才能做出合理的決策。工具本身不能改善系統或產品,但是使用正確的工具,我們可以工作得更高效,生產率更高。因此了解正確的工具,對你的工作領域是非常重要的。
這篇文章的目的就是列舉並描述Python可用的最有用的機器學習工具和庫。這個列表中,我們不要求這些庫是用Python寫的,只要有Python介面就夠了。我們在最後也有一小節關於深度學習(Deep Learning)的內容,因為它最近也吸引了相當多的關注。
我們的目的不是列出Python中所有機器學習庫(搜索「機器學習」時Python包索引(PyPI)返回了139個結果),而是列出我們所知的有用並且維護良好的那些。另外,盡管有些模塊可以用於多種機器學習任務,我們只列出主要焦點在機器學習的庫。比如,雖然Scipy包含一些聚類演算法,但是它的主焦點不是機器學習而是全面的科學計算工具集。因此我們排除了Scipy(盡管我們也使用它!)。
另一個需要提到的是,我們同樣會根據與其他科學計算庫的集成效果來評估這些庫,因為機器學習(有監督的或者無監督的)也是數據處理系統的一部分。如果你使用的庫與數據處理系統其他的庫不相配,你就要花大量時間創建不同庫之間的中間層。在工具集中有個很棒的庫很重要,但這個庫能與其他庫良好集成也同樣重要。
如果你擅長其他語言,但也想使用Python包,我們也簡單地描述如何與Python進行集成來使用這篇文章列出的庫。
Scikit-LearnScikit Learn是我們在CB Insights選用的機器學習工具。我們用它進行分類、特徵選擇、特徵提取和聚集。我們最愛的一點是它擁有易用的一致性API,並提供了很多開箱可用的求值、診斷和交叉驗證方法(是不是聽起來很熟悉?Python也提供了「電池已備(譯註:指開箱可用)」的方法)。錦上添花的是它底層使用Scipy數據結構,與Python中其餘使用Scipy、Numpy、Pandas和Matplotlib進行科學計算的部分適應地很好。因此,如果你想可視化分類器的性能(比如,使用精確率與反饋率(precision-recall)圖表,或者接收者操作特徵(Receiver Operating Characteristics,ROC)曲線),Matplotlib可以幫助進行快速可視化。考慮到花在清理和構造數據的時間,使用這個庫會非常方便,因為它可以緊密集成到其他科學計算包上。
另外,它還包含有限的自然語言處理特徵提取能力,以及詞袋(bag of words)、tfidf(Term Frequency Inverse Document Frequency演算法)、預處理(停用詞/stop-words,自定義預處理,分析器)。此外,如果你想快速對小數據集(toy dataset)進行不同基準測試的話,它自帶的數據集模塊提供了常見和有用的數據集。你還可以根據這些數據集創建自己的小數據集,這樣在將模型應用到真實世界中之前,你可以按照自己的目的來檢驗模型是否符合期望。對參數最優化和參數調整,它也提供了網格搜索和隨機搜索。如果沒有強大的社區支持,或者維護得不好,這些特性都不可能實現。我們期盼它的第一個穩定發布版。
StatsmodelsStatsmodels是另一個聚焦在統計模型上的強大的庫,主要用於預測性和探索性分析。如果你想擬合線性模型、進行統計分析,或者預測性建模,那麼Statsmodels非常適合。它提供的統計測試相當全面,覆蓋了大部分情況的驗證任務。如果你是R或者S的用戶,它也提供了某些統計模型的R語法。它的模型同時也接受Numpy數組和Pandas數據幀,讓中間數據結構成為過去!
PyMCPyMC是做貝葉斯曲線的工具。它包含貝葉斯模型、統計分布和模型收斂的診斷工具,也包含一些層次模型。如果想進行貝葉斯分析,你應該看看。
ShogunShogun是個聚焦在支持向量機(Support Vector Machines, SVM)上的機器學習工具箱,用C++編寫。它正處於積極開發和維護中,提供了Python介面,也是文檔化最好的介面。但是,相對於Scikit-learn,我們發現它的API比較難用。而且,也沒提供很多開箱可用的診斷和求值演算法。但是,速度是個很大的優勢。
GensimGensim被定義為「人們的主題建模工具(topic modeling for humans)」。它的主頁上描述,其焦點是狄利克雷劃分(Latent Dirichlet Allocation, LDA)及變體。不同於其他包,它支持自然語言處理,能將NLP和其他機器學習演算法更容易組合在一起。如果你的領域在NLP,並想進行聚集和基本的分類,你可以看看。目前,它們引入了Google的基於遞歸神經網路(Recurrent Neural Network)的文本表示法word2vec。這個庫只使用Python編寫。
OrangeOrange是這篇文章列舉的所有庫中唯一帶有圖形用戶界面(Graphical User Interface,GUI)的。對分類、聚集和特徵選擇方法而言,它是相當全面的,還有些交叉驗證的方法。在某些方面比Scikit-learn還要好(分類方法、一些預處理能力),但與其他科學計算系統(Numpy, Scipy, Matplotlib, Pandas)的適配上比不上Scikit-learn。但是,包含GUI是個很重要的優勢。你可以可視化交叉驗證的結果、模型和特徵選擇方法(某些功能需要安裝Graphviz)。對大多數演算法,Orange都有自己的數據結構,所以你需要將數據包裝成Orange兼容的數據結構,這使得其學習曲線更陡。
PyMVPAPyMVPA是另一個統計學習庫,API上與Scikit-learn很像。包含交叉驗證和診斷工具,但是沒有Scikit-learn全面。
深度學習盡管深度學習是機器學習的一個子節,我們在這里創建單獨一節的原因是,它最新吸引了Google和Facebook人才招聘部門的很多注意。
TheanoTheano是最成熟的深度學習庫。它提供了不錯的數據結構(張量,tensor)來表示神經網路的層,對線性代數來說很高效,與Numpy的數組類似。需要注意的是,它的API可能不是很直觀,用戶的學習曲線會很高。有很多基於Theano的庫都在利用其數據結構。它同時支持開箱可用的GPU編程。
PyLearn2還有另外一個基於Theano的庫,PyLearn2,它給Theano引入了模塊化和可配置性,你可以通過不同的配置文件來創建神經網路,這樣嘗試不同的參數會更容易。可以說,如果分離神經網路的參數和屬性到配置文件,它的模塊化能力更強大。
DecafDecaf是最近由UC Berkeley發布的深度學習庫,在Imagenet分類挑戰中測試發現,其神經網路實現是很先進的(state of art)。
Nolearn如果你想在深度學習中也能使用優秀的Scikit-learn庫API,封裝了Decaf的Nolearn會讓你能夠更輕松地使用它。它是對Decaf的包裝,與Scikit-learn兼容(大部分),使得Decaf更不可思議。
OverFeatOverFeat是最近貓vs.狗(kaggle挑戰)的勝利者,它使用C++編寫,也包含一個Python包裝器(還有Matlab和Lua)。通過Torch庫使用GPU,所以速度很快。也贏得了ImageNet分類的檢測和本地化挑戰。如果你的領域是計算機視覺,你可能需要看看。
HebelHebel是另一個帶有GPU支持的神經網路庫,開箱可用。你可以通過YAML文件(與Pylearn2類似)決定神經網路的屬性,提供了將神級網路和代碼友好分離的方式,可以快速地運行模型。由於開發不久,就深度和廣度上說,文檔很匱乏。就神經網路模型來說,也是有局限的,因為只支持一種神經網路模型(正向反饋,feed-forward)。但是,它是用純Python編寫,將會是很友好的庫,因為包含很多實用函數,比如調度器和監視器,其他庫中我們並沒有發現這些功能。
NeurolabNeuroLab是另一個API友好(與Matlabapi類似)的神經網路庫。與其他庫不同,它包含遞歸神經網路(Recurrent Neural Network,RNN)實現的不同變體。如果你想使用RNN,這個庫是同類API中最好的選擇之一。
與其他語言集成你不了解Python但是很擅長其他語言?不要絕望!Python(還有其他)的一個強項就是它是一個完美的膠水語言,你可以使用自己常用的編程語言,通過Python來訪問這些庫。以下適合各種編程語言的包可以用於將其他語言與Python組合到一起:R -> RPythonMatlab -> matpythonJava -> JythonLua -> Lunatic PythonJulia -> PyCall.jl
不活躍的庫這些庫超過一年沒有發布任何更新,我們列出是因為你有可能會有用,但是這些庫不太可能會進行BUG修復,特別是未來進行增強。MDPMlPyFFnetPyBrain如果我們遺漏了你最愛的Python機器學習包,通過評論讓我們知道。我們很樂意將其添加到文章中。
❸ 如何用python實現隨機森林分類
大家如何使用scikit-learn包中的類方法來進行隨機森林演算法的預測。其中講的比較好的是各個參數的具體用途。
這里我給出我的理解和部分翻譯:
參數說明:
最主要的兩個參數是n_estimators和max_features。
n_estimators:表示森林裡樹的個數。理論上是越大越好。但是伴隨著就是計算時間的增長。但是並不是取得越大就會越好,預測效果最好的將會出現在合理的樹個數。
max_features:隨機選擇特徵集合的子集合,並用來分割節點。子集合的個數越少,方差就會減少的越快,但同時偏差就會增加的越快。根據較好的實踐經驗。如果是回歸問題則:
max_features=n_features,如果是分類問題則max_features=sqrt(n_features)。
如果想獲取較好的結果,必須將max_depth=None,同時min_sample_split=1。
同時還要記得進行cross_validated(交叉驗證),除此之外記得在random forest中,bootstrap=True。但在extra-trees中,bootstrap=False。
這里也給出一篇老外寫的文章:調整你的隨機森林模型參數http://www.analyticsvidhya.com/blog/2015/06/tuning-random-forest-model/
這里我使用了scikit-learn自帶的iris數據來進行隨機森林的預測:
[python]view plain
fromsklearn.
fromsklearn.
importnumpyasnp
fromsklearn.datasetsimportload_iris
iris=load_iris()
#printiris#iris的4個屬性是:萼片寬度萼片長度花瓣寬度花瓣長度標簽是花的種類:setosaversicolourvirginica
printiris['target'].shape
rf=RandomForestRegressor()#這里使用了默認的參數設置
rf.fit(iris.data[:150],iris.target[:150])#進行模型的訓練
#
#隨機挑選兩個預測不相同的樣本
instance=iris.data[[100,109]]
printinstance
print'instance0prediction;',rf.predict(instance[0])
print'instance1prediction;',rf.predict(instance[1])
printiris.target[100],iris.target[109]
- 返回的結果如下:
- (150,)
- [[ 6.3 3.3 6. 2.5]
- [ 7.2 3.6 6.1 2.5]]
- instance 0 prediction; [ 2.]
- instance 1 prediction; [ 2.]
- 2 2
- 在這里我有點困惑,就是在scikit-learn演算法包中隨機森林實際上就是一顆顆決策樹組成的。但是之前我寫的決策樹博客中是可以將決策樹給顯示出來。但是隨機森林卻做了黑盒處理。我們不知道內部的決策樹結構,甚至連父節點的選擇特徵都不知道是誰。所以我給出下面的代碼(這代碼不是我的原創),可以顯示的顯示出所有的特徵的貢獻。所以對於貢獻不大的,甚至是負貢獻的我們可以考慮刪除這一列的特徵值,避免做無用的分類。
fromsklearn.cross_validationimportcross_val_score,ShuffleSplit
X=iris["data"]
Y=iris["target"]
names=iris["feature_names"]
rf=RandomForestRegressor()
scores=[]
foriinrange(X.shape[1]):
score=cross_val_score(rf,X[:,i:i+1],Y,scoring="r2",
cv=ShuffleSplit(len(X),3,.3))
scores.append((round(np.mean(score),3),names[i]))
printsorted(scores,reverse=True)
- 顯示的結果如下:
- [(0.934, 'petal width (cm)'), (0.929, 'petal length (cm)'), (0.597, 'sepal length (cm)'), (0.276, 'sepal width (cm)')]
- 這里我們會發現petal width、petal length這兩個特徵將起到絕對的貢獻,之後是sepal length,影響最小的是sepal width。這段代碼將會提示我們各個特徵的貢獻,可以讓我們知道部分內部的結構。
[python]view plain
❹ 基於python的prosper借貸平台之數據分析
項目介紹:
p2p 借貸業務具有門檻低,渠道成本低的特性,風險防控對於出借企業來說非常重要。本項目需要
從大量借貸者的數據集中分析出容易違約和不容易違約的人群畫像特徵,以給業務做貸前決策使
用。同時使用機器學習演算法,實現自動識別風險人群(精準率為 89.86%),加快人工審查效率。
項目具體內容:
1、使用 python pandas 工具進行數據清洗、缺失值、異常值處理以及特徵指標篩選。
2、使用 python matplotlib 可視化工具進行探索式數據分析,展示用戶關鍵特徵如月收入、信用卡
透支情況對於違約率的影響情況。
3、使用機器學習隨機森林進行建模分析,使用學習曲線、網格搜索、交叉驗證,最終得到了一個評
分為 84.9%、精準率為 89.86%、召回率為 80.70%、auc 面積為 0.9337 數據預測模型。
本次數據訓練使用的模型是隨機森林分類演算法,通過對預處理過的數據集進行訓練,使用學習曲線、網格搜索、交叉驗證。最終得到了一個評分為84.9%、精準率為89.86%、召回率為80.70%、 auc面積為0.9337 數據預測模型。
數據預處理的基本流程與思路:
1、首先要明確有多少特徵,哪些是連續的,哪些是類別的。
2、檢查有沒有缺失值,對確實的特徵選擇恰當方式進行彌補,使數據完整。
3、對連續的數值型特徵進行標准化,使得均值為0,方差為1。
4、對類別型的特徵進行one-hot編碼。
5、將需要轉換成類別型數據的連續型數據進行二值化。
6、為防止過擬合或者其他原因,選擇是否要將數據進行正則化。
7、在對數據進行初探之後發現效果不佳,可以嘗試使用多項式方法,尋找非線性的關系。
8、根據實際問題分析是否需要對特徵進行相應的函數轉換。
導入數據集,並查看數據基本情況。可以看到prosper原始數據量比較龐大,一個有113937個樣本,80個特徵列,1個標簽列。
1.1、特徵較多,先共刪減一部分無用的特徵。
1.2 查看數據缺失情況,可以看到有40個特徵是存在數據缺失的,缺失率從0.000219-0.882909不等。下面處理缺失數據。
1.2.1 刪除缺失值比較多的特徵
下面兩個特徵缺失率太高,且與我們要分析的相關性不大,直接刪除掉。
1.2.2 獲取數據類型是分類變數的所有特徵,並使用unknown進行填充
1.2.3 特殊變數使用計算公式進行填充
1.2.4 去掉意義重復列
1.2.5 刪除缺失率比較少的特徵的缺失數據行
處理完缺失數據後,樣本量為106290,特徵量為55
1.3 數據過濾
1.3.1 從2009年7月開始,Prosper調整了對客戶的評估方式,此次我們只對2009-07-01後的貸款進行分析。
過濾完數據後,樣本量變為82931,特徵量為54
2.1單變數分析
0為未違約人數,1位違約人數,可以看到2009.07以後,違約率為22.90%
2.1.1不同地區貸款數量分布
從圖中可以看到加利福尼亞州貸款數量遠比其他州的數量高。由於prosper總部就位於加利福尼亞州,這與實際情況一致。其他排名靠前的分別是得克薩斯、紐約、佛羅里達、伊利諾伊,貸款數據均超過了5000條。根據2015年美國各州的GDP排名,這5個州剛好排名前五,而且順序也是一致的。說明Prosper平台的用戶主要分布在美國經濟發達的地區。
2.1.2 貸款人收入情況分布
年薪在25000美金以上在美國屬於技術性白領或者有一定學歷的職員,50000美金已經是近金領階層,比如:大學教授,醫生等。從圖中可以看出Prosper平台用戶的收入水平都相對較高,有利於用戶還款,利於平台和投資者的風險控制。
2.1.3貸款人職業分布
從圖中可以看出,除了不願意透露具體職業的人,大部分用戶是教授、程序員、企業高管等具有一定社會地位的人,這部分人受過高等教育,信用有一定保障。另外,這與之前看到的收入情況相符。
2.1.4貸款人債務收入比分布
大部分用戶的債務收入比在0.2左右,超過0.5的占很少部分。說明Prosper平台用戶的還款能力還是比較樂觀的
2.1.5 貸款者信用卡使用情況
BankcardUtilization代表的是信用卡使用金額和信用卡額度的比值,可以體現用戶的資金需求。Prosper用戶多是0.5~1之間,說明用戶每個月還有信用卡要還,降低了其還款能力。
2.2 相關的關鍵因素對貸款違約率的影響
2.2.1借貸人收入IncomeRange對違約率的影響
從圖中可以看出:
1.一般來說收入越高違約率越低
2.貸款的人員主要集中在中等收入群體
2.2.2 債務收入比DebtToIncomeRatio對違約率的影響
從上圖可以看出:
1.債務收入比小於0.6時,違約數明顯小於未違約數,
2.當債務收入比大於0.6時,兩者的差距不是很明顯甚至違約數大於未違約數,說明了債務收入比越大的人越容易違約
2.2.3 借款人BankcardUtilization對違約率的影響
1.總的來說,隨著信用卡的透支比例越來越高,違約率也越來越高
2.SuperUse的違約率到了37.5%,這部分人群需要嚴格了監控,No Use人群也有31%的違約率,當初將信用卡透支比例為0和NA的數據都歸類為No Use,顯然沒有這么簡單,應該是大部分人群的NA值是為了隱藏自己的高透支比例而填寫的
2.2.4 消費信用分CreditScoreRange對違約率的影響
從上圖可以看出:
1.隨著信用分數CreditScore的上升,它的違約率在下降
2.大部分貸款者的信用分為650-800,違約率在0.06-0.02
2.2.5 過去7年借款人違約次數DelinquenciesLast7Years對違約率的影響
過去七年違約次數(DelinquenciesLast7Years)能夠衡量一個人在過去七年中徵信情況,違約一次或以上的人在借款時違約概率更大。
從上圖可以看出:
1.總體來說過去7年違約次數越多,違約率越高
2.過去7年未違約的人數相對來說比其他違約的人數高很多,具體看下面的分析
3.1 數據轉化
3.1.1類變數進行啞變數化
樣本量變為82931,特徵量為127
3.1.2 標簽變數進行二分類
已完成貸款的樣本量變為26365,特徵量為127
未違約率為:0.7709084012895885;違約率為0.22909159871041151
3.2 至此,數據預處理的工作就告一段落,保存預處理好的數據。
導入經過預處理的prosper借貸數據集
4.1 手工挑選特徵查看一下建模效果
准確率為0.7695
4.2 使用模型自己選取特徵
准確率為0.7780
4.3 使用學習曲線選取最優n_estimators
在0-200/20內學習,得到最優n_estimators=161,score = 0.8508
在151-171/20內學習,得到最優n_estimators=163,score = 0.8511
4.4 使用網格搜索調其他參數
在0-60/5內學習,得到最優max_depth=41
在0-60/5內學習,得到最優max_features=16
這里由於比較耗時,沒有進一步細化選擇更高的參數
4.4 最終模型效果
最終准確率 0.8490528905289052
混淆矩陣 :
[[5552 554]
[1175 4914]]
精準率 : [0.82533076 0.89868325]
召回率 : [0.90926957 0.80702907]
roc和auc面積為0.9337
4.5 查看各特徵的重要性
4.6 數據預測
預測的違約率0.0427
❺ python常用到哪些庫
Python作為一個設計優秀的程序語言,現在已廣泛應用於各種領域,依靠其強大的第三方類庫,Python在各個領域都能發揮巨大的作用。
下面我們就來看一下python中常用到的庫:
數值計算庫:
1. NumPy
支持多維數組與矩陣運算,也針對數組運算提供大量的數學函數庫。通常與SciPy和Matplotlib一起使用,支持比Python更多種類的數值類型,其中定義的最重要的對象是稱為ndarray的n維數組類型,用於描述相同類型的元素集合,可以使用基於0的索引訪問集合中元素。
2. SciPy
在NumPy庫的基礎上增加了眾多的數學、科學及工程計算中常用的庫函數,如線性代數、常微分方程數值求解、信號處理、圖像處理、稀疏矩陣等,可進行插值處理、信號濾波,以及使用C語言加速計算。
3. Pandas
基於NumPy的一種工具,為解決數據分析任務而生。納入大量庫和一些標準的數據模型,提供高效地操作大型數據集所需的工具及大量的能快速便捷處理數據的函數和方法,為時間序列分析提供很好的支持,提供多種數據結構,如Series、Time-Series、DataFrame和Panel。
數據可視化庫:
4. Matplotlib
第一個Python可視化庫,有許多別的程序庫都是建立在其基礎上或者直接調用該庫,可以很方便地得到數據的大致信息,功能非常強大,但也非常復雜。
5. Seaborn
利用了Matplotlib,用簡潔的代碼來製作好看的圖表。與Matplotlib最大的區別為默認繪圖風格和色彩搭配都具有現代美感。
6. ggplot
基於R的一個作圖庫ggplot2,同時利用了源於《圖像語法》(The Grammar of Graphics)中的概念,允許疊加不同的圖層來完成一幅圖,並不適用於製作非常個性化的圖像,為操作的簡潔度而犧牲了圖像的復雜度。
7. Bokeh
跟ggplot一樣,Bokeh也基於《圖形語法》的概念。與ggplot不同之處為它完全基於Python而不是從R處引用。長處在於能用於製作可交互、可直接用於網路的圖表。圖表可以輸出為JSON對象、HTML文檔或者可交互的網路應用。
8. Plotly
可以通過Python notebook使用,與Bokeh一樣致力於交互圖表的製作,但提供在別的庫中幾乎沒有的幾種圖表類型,如等值線圖、樹形圖和三維圖表。
9. pygal
與Bokeh和Plotly一樣,提供可直接嵌入網路瀏覽器的可交互圖像。與其他兩者的主要區別在於可將圖表輸出為SVG格式,所有的圖表都被封裝成方法,且默認的風格也很漂亮,用幾行代碼就可以很容易地製作出漂亮的圖表。
10. geoplotlib
用於製作地圖和地理相關數據的工具箱。可用來製作多種地圖,比如等值區域圖、熱度圖、點密度圖。必須安裝Pyglet(一個面向對象編程介面)方可使用。
11. missingno
用圖像的方式快速評估數據缺失的情況,可根據數據的完整度對數據進行排序或過濾,或者根據熱度圖或樹狀圖對數據進行修正。
web開發庫:
12. Django
一個高級的Python Web框架,支持快速開發,提供從模板引擎到ORM所需的一切東西,使用該庫構建App時,必須遵循Django的方式。
13. Socket
一個套接字通訊底層庫,用於在伺服器和客戶端間建立TCP或UDP連接,通過連接發送請求與響應。
14. Flask
一個基於Werkzeug、Jinja 2的Python輕量級框架(microframework),默認配備Jinja模板引擎,也包含其他模板引擎或ORM供選擇,適合用來編寫API服務(RESTful rervices)。
15. Twisted
一個使用Python實現的基於事件驅動的網路引擎框架,建立在deferred object之上,一個通過非同步架構實現的高性能的引擎,不適用於編寫常規的Web Apps,更適用於底層網路。
資料庫管理:
16. Mysql-python
又稱MySQLdb,是Python連接MySQL最流行的一個驅動,很多框架也基於此庫進行開發。只支持Python 2.x,且安裝時有許多前置條件。由於該庫基於C語言開發,在Windows平台上的安裝非常不友好,經常出現失敗的情況,現在基本不推薦使用,取代品為衍生版本。
17. mysqlclient
完全兼容MySQLdb,同時支持Python 3.x,是Django ORM的依賴工具,可使用原生SQL來操作資料庫,安裝方式與MySQLdb一致。
18. PyMySQL
純Python實現的驅動,速度比MySQLdb慢,最大的特點為安裝方式簡潔,同時也兼容MySQL-python。
19. SQLAlchemy
一種既支持原生SQL,又支持ORM的工具。ORM是Python對象與資料庫關系表的一種映射關系,可有效提高寫代碼的速度,同時兼容多種資料庫系統,如SQLite、MySQL、PostgreSQL,代價為性能上的一些損失。
自動化運維:
20. jumpsever跳板機
一種由Python編寫的開源跳板機(堡壘機)系統,實現了跳板機的基本功能,包含認證、授權和審計,集成了Ansible、批量命令等。
支持WebTerminal Bootstrap編寫,界面美觀,自動收集硬體信息,支持錄像回放、命令搜索、實時監控、批量上傳下載等功能,基於SSH協議進行管理,客戶端無須安裝agent。主要用於解決可視化安全管理,因完全開源,容易再次開發。
21. Mage分布式監控系統
一種用Python開發的自動化監控系統,可監控常用系統服務、應用、網路設備,可在一台主機上監控多個不同服務,不同服務的監控間隔可以不同,同一個服務在不同主機上的監控間隔、報警閾值可以不同,並提供數據可視化界面。
22. Mage的CMDB
一種用Python開發的硬體管理系統,包含採集硬體數據、API、頁面管理3部分功能,主要用於自動化管理筆記本、路由器等常見設備的日常使用。由伺服器的客戶端採集硬體數據,將硬體信息發送至API,API負責將獲取的數據保存至資料庫中,後台管理程序負責對伺服器信息進行配置和展示。
23. 任務調度系統
一種由Python開發的任務調度系統,主要用於自動化地將一個服務進程分布到其他多個機器的多個進程中,一個服務進程可作為調度者依靠網路通信完成這一工作。
24. Python運維流程系統
一種使用Python語言編寫的調度和監控工作流的平台,內部用於創建、監控和調整數據管道。允許工作流開發人員輕松創建、維護和周期性地調度運行工作流,包括了如數據存儲、增長分析、Email發送、A/B測試等諸多跨多部門的用例。
GUI編程:
25. Tkinter
一個Python的標准GUI庫,可以快速地創建GUI應用程序,可以在大多數的UNIX平台下使用,同樣可以應用在Windows和Macintosh系統中,Tkinter 8.0的後續版本可以實現本地窗口風格,並良好地運行在絕大多數平台中。
26. wxPython
一款開源軟體跨平台GUI庫wxWidgets的Python封裝和Python模塊,是Python語言的一套優秀的GUI圖形庫,允許程序員很方便地創建完整的、功能健全的GUI用戶界面。
27. PyQt
一個創建GUI應用程序的工具庫,是Python編程語言和Qt的成功融合,可以運行在所有主要操作系統上,包括UNIX、Windows和Mac。PyQt採用雙許可證,開發人員可以選擇GPL和商業許可,從PyQt的版本4開始,GPL許可證可用於所有支持的平台。
28. PySide
一個跨平台的應用程式框架Qt的Python綁定版本,提供與PyQt類似的功能,並相容API,但與PyQt不同處為其使用LGPL授權。
更多Python知識請關注Python自學網。
❻ python有哪些庫
Arrow
Python中處理時間的庫有datetime,但是它過於簡單,使用起來不夠方便和智能,而Arrow可以說非常的方便和智能。它可以輕松地定位幾個小時之前的時間,可以輕松轉換時區時間,對於一個小時前,2個小時之內這樣人性化的信息也能夠准確解讀。
Behold
調試程序是每個程序員必備的技能,對於腳本語言,很多人習慣於使用print進行調試,然而對於大項目來說,print的功能還遠遠不足,我們希望有一個可以輕松使用,調試方便,對變數監視完整,格式已於查看的工具,而behold就是那個非常好用的調試庫。
Click
現在幾乎所有的框架都有自己的命令行腳手架,python也不例外,那麼如何快速開發出屬於自己的命令行程序呢?答案就是使用python的click庫。click庫對命令行api進行了大量封裝,你可以輕松開發出屬於自己的CLI命令集。終端的顏色,環境變數信息,通過click都可以輕松進行獲取和改變。
Numba
如果你從事數學方面的分析和計算,那麼Numba一定是你必不可少的庫。NumPy通過將高速C庫包裝在Python介面中來工作,而Cython使用可選的類型將Python編譯為C以提高性能。但是Numba無疑是最方便的,因為它允許使用裝飾器選擇性地加速Python函數。
Matlibplot
做過數據分析,數據可視化的數學學生一定知道matlab這個軟體,這是一個收費的數學商用軟體,在Python中,Matlibplot就是為了實現這個軟體中功能開發的第三方Python庫。並且它完全是免費的,很多學校都是用它來進行數學教學和研究的。
Pillow
圖像處理是任何時候我們都需要關注的問題,平時我們看到很多PS中的神技,比如調整畫面顏色,飽和度,調整圖像尺寸,裁剪圖像等等,這些其實都可以通過Python簡單完成,而其中我們需要使用的庫就是Pillow。
pyqt5
Python是可以開發圖形界面程序的。而pyqt就是一款非常好用的第三方GUI庫,有了它,你可以輕松開發出跨平台的圖形應用程序,其中qtdesigner設計器,更是加速了我們開發圖形界面的速度。
Scrapy
Python被很多人知道都是因為它的爬蟲功能,而Python中說到爬蟲框架,人們公認最好的就Scrapy沒有之一。Scrapy可以說專門為爬蟲而生,它的設計思想,還有他的簡潔性,可以說至少再過幾年,也沒有能超過它的。
除了以上內容,比較常見的Python庫還包括Splinter、Pygame、PyInstaller、Openpyxl等,Python的庫多到你一身都學不完。
❼ 如何用python和scikit learn實現神經網路
1:神經網路演算法簡介
2:Backpropagation演算法詳細介紹
3:非線性轉化方程舉例
4:自己實現神經網路演算法NeuralNetwork
5:基於NeuralNetwork的XOR實例
6:基於NeuralNetwork的手寫數字識別實例
7:scikit-learn中BernoulliRBM使用實例
8:scikit-learn中的手寫數字識別實例
一:神經網路演算法簡介
1:背景
以人腦神經網路為啟發,歷史上出現過很多版本,但最著名的是backpropagation
2:多層向前神經網路(Multilayer Feed-Forward Neural Network)
❽ Python異常樣本識別 交叉驗證出現錯誤
penalty = '12' 這個參數不對,只有L1和L2正則,打錯了吧
❾ python基礎知識有哪些需要背(記住是基礎知識)我是初學者
或看好Python的廣闊前景,或看中Python的語法簡潔,越來越多零基礎的人選擇學Python。但是Python基礎知識有哪些呢?Python部分基礎知識點匯總
數據類型:編程中操作的每一個數據都是有其類型的,比如我們的程序需要進行數學計算,那麼進行計算的參數和結果就都是數值,我們需要輸入、輸出一段話,那麼這段話就是一個字元串。
變數和常量:變數有什麼用?怎麼使用?常量又是做什麼的?
控制流語句:控制流語句讓程序變得更加靈活,稍微復雜一些的程序都需要用到控制流語句中的判斷和循環,那麼如何在Python中高效應用控制流語句就顯得非常重要。
函數:當程序開始復雜起來,某些功能可能需要多次使用的時候,我們就可以把這個功能封裝成「函數」,函數就像是工具箱里一件件的工具,在需要的時候打開工具箱拿出即可使用。
數據結構:Python怎麼處理數據?列表、元組、集合、字典分別有什麼特性都需要詳細了解。
異常處理:當你的程序開始復雜起來,可能會遇到某些不確定是否會出現錯誤的情況,這個時候怎樣自定義異常、處理異常就十分重要。
注釋:不寫注釋的程序員不是好程序員。
面向對象:面向對象是一種編程思想,可以讓程序變得更可復用,同時邏輯更清晰,效率最高。
文件操作:很多時候我們需要對本地文件進行一些增刪改查的操作。
模塊和包:Python之所以如此受歡迎,很大程度上得益於它有非常豐富模塊和包,這些東西可以讓你少造輪子。
Python與網路:python獲取網頁信息、與其他計算機通信、訪問資料庫等。
以上大部分其實是編程基礎,但是只學這些還是不夠的,很多企業招聘的Python崗位均需要和其他方向內容相結合,比如大數據、運維、Web等等。因此零基礎快速入門進階Python技能還需要進行系統的學習。
❿ python多元線性回歸怎麼計算
1、什麼是多元線性回歸模型?
當y值的影響因素不唯一時,採用多元線性回歸模型。
y =y=β0+β1x1+β2x2+...+βnxn
例如商品的銷售額可能不電視廣告投入,收音機廣告投入,報紙廣告投入有關系,可以有 sales =β0+β1*TV+β2* radio+β3*newspaper.
2、使用pandas來讀取數據
pandas 是一個用於數據探索、數據分析和數據處理的python庫
[python]view plain
importpandasaspd
<prename="code"class="python">#
data=pd.read_csv('/home/lulei/Advertising.csv')
#displaythefirst5rows
data.head()
- TV Radio Newspaper Sales
- 0 230.1 37.8 69.2 22.1
- 1 44.5 39.3 45.1 10.4
- 2 17.2 45.9 69.3 9.3
- 3 151.5 41.3 58.5 18.5
- 4 180.8 10.8 58.4 12.9
Series類似於一維數組,它有一組數據以及一組與之相關的數據標簽(即索引)組成。
DataFrame是一個表格型的數據結構,它含有一組有序的列,每列可以是不同的值類型。DataFrame既有行索引也有列索引,它可以被看做由Series組成的字典。
#displaythelast5rows
data.tail()
- TV Radio Newspaper Sales
- 195 38.2 3.7 13.8 7.6
- 196 94.2 4.9 8.1 9.7
- 197 177.0 9.3 6.4 12.8
- 198 283.6 42.0 66.2 25.5
- 199 232.1 8.6 8.7 13.4
#checktheshapeoftheDataFrame(rows,colums)
data.shape
TV:對於一個給定市場中單一產品,用於電視上的廣告費用(以千為單位)
Radio:在廣播媒體上投資的廣告費用
Newspaper:用於報紙媒體的廣告費用
Sales:對應產品的銷量
importseabornassns
importmatplotlib.pyplotasplt
#ots
sns.pairplot(data,x_vars=['TV','Radio','Newspaper'],y_vars='Sales',size=7,aspect=0.8)
plt.show()#注意必須加上這一句,否則無法顯示。
這里選擇TV、Radio、Newspaper作為特徵,Sales作為觀測值
返回的結果:
- seaborn的pairplot函數繪制X的每一維度和對應Y的散點圖。通過設置size和aspect參數來調節顯示的大小和比例。可以從圖中看出,TV特徵和銷量是有比較強的線性關系的,而Radio和Sales線性關系弱一些,Newspaper和Sales線性關系更弱。通過加入一個參數kind='reg',seaborn可以添加一條最佳擬合直線和95%的置信帶。
sns.pairplot(data,x_vars=['TV','Radio','Newspaper'],y_vars='Sales',size=7,aspect=0.8,kind='reg')
plt.show()
y是響應
β0是截距
β1是x1的系數,以此類推
#
feature_cols=['TV','Radio','Newspaper']
#
X=data[feature_cols]
#
X=data[['TV','Radio','Newspaper']]
#printthefirst5rows
printX.head()
#checkthetypeandshapeofX
printtype(X)
printX.shape
- TV Radio Newspaper
- 0 230.1 37.8 69.2
- 1 44.5 39.3 45.1
- 2 17.2 45.9 69.3
- 3 151.5 41.3 58.5
- 4 180.8 10.8 58.4
- <class 'pandas.core.frame.DataFrame'>
- (200, 3)
#selectaSeriesfromtheDataFrame
y=data['Sales']
#
y=data.Sales
#printthefirst5values
printy.head()
- 0 22.1
- 1 10.4
- 2 9.3
- 3 18.5
- 4 12.9
- Name: Sales
<prename="code"class="python"><spanstyle="font-size:14px;">##構造訓練集和測試集
fromsklearn.cross_validationimporttrain_test_split#這里是引用了交叉驗證
X_train,X_test,y_train,y_test=train_test_split(X,y,random_state=1)
printX_train.shape
printy_train.shape
printX_test.shape
printy_test.shape
- (150, 3)
- (150,)
- (50, 3)
- (50,)
- ImportError Traceback (most recent call last)<ipython-input-182-3eee51fcba5a> in <mole>() 1 ###構造訓練集和測試集----> 2 from sklearn.cross_validation import train_test_split 3 #import sklearn.cross_validation 4 X_train,X_test, y_train, y_test = train_test_split(X, y, random_state=1) 5 # default split is 75% for training and 25% for testingImportError: cannot import name train_test_split
fromsklearn.linear_modelimportLinearRegression
linreg=LinearRegression()
model=linreg.fit(X_train,y_train)
printmodel
printlinreg.intercept_
printlinreg.coef_
- LinearRegression(_X=True, fit_intercept=True, normalize=False)
- 2.66816623043
- [ 0.04641001 0.19272538 -0.00349015]
#
zip(feature_cols,linreg.coef_)
- [('TV', 0.046410010869663267),
- ('Radio', 0.19272538367491721),
- ('Newspaper', -0.0034901506098328305)]
y_pred=linreg.predict(X_test)
printy_pred
printtype(y_pred)
- [ 14.58678373 7.92397999 16.9497993 19.35791038 7.36360284
- 7.35359269 16.08342325 9.3046 20.35507374 12.63160058
- 22.83356472 9.66291461 4.18055603 13.70368584 11.4533557
- 4.16940565 10.31271413 23.06786868 17.80464565 14.53070132
- 15.19656684 14.22969609 7.54691167 13.47210324 15.00625898
- 19.28532444 20.7319878 19.70408833 18.21640853 8.50112687
- 9.8493781 9.51425763 9.73270043 18.13782015 15.41731544
- 5.07416787 12.20575251 14.05507493 10.6699926 7.16006245
- 11.80728836 24.79748121 10.40809168 24.05228404 18.44737314
- 20.80572631 9.45424805 17.00481708 5.78634105 5.10594849]
- <type 'numpy.ndarray'>
<prename="code"class="python">#計算Sales預測的RMSE
printtype(y_pred),type(y_test)
printlen(y_pred),len(y_test)
printy_pred.shape,y_test.shape
fromsklearnimportmetrics
importnumpyasnp
sum_mean=0
foriinrange(len(y_pred)):
sum_mean+=(y_pred[i]-y_test.values[i])**2
sum_erro=np.sqrt(sum_mean/50)
#calculateRMSEbyhand
print"RMSEbyhand:",sum_erro
- <type 'numpy.ndarray'> <class 'pandas.core.series.Series'>
- 50 50
- (50,) (50,)
- RMSE by hand: 1.42998147691
importmatplotlib.pyplotasplt
plt.figure()
plt.plot(range(len(y_pred)),y_pred,'b',label="predict")
plt.plot(range(len(y_pred)),y_test,'r',label="test")
plt.legend(loc="upperright")#顯示圖中的標簽
plt.xlabel("thenumberofsales")
plt.ylabel('valueofsales')
plt.show()
#
feature_cols=['TV','Radio','Newspaper']
#
X=data[feature_cols]
#
#X=data[['TV','Radio','Newspaper']]#只需修改這里即可<prename="code"class="python"style="font-size:15px;line-height:35px;">X=data[['TV','Radio']]#去掉newspaper其他的代碼不變
- 2.81843904823
- [ 0.04588771 0.18721008]
- RMSE by hand: 1.28208957507
- ImportError Traceback (most recent call last)<ipython-input-182-3eee51fcba5a> in <mole>() 1 ###構造訓練集和測試集----> 2 from sklearn.cross_validation import train_test_split 3 #import sklearn.cross_validation 4 X_train,X_test, y_train, y_test = train_test_split(X, y, random_state=1) 5 # default split is 75% for training and 25% for testingImportError: cannot import name train_test_split
[html]view plain
上面代碼的運行結果:
上面顯示的結果類似一個電子表格,這個結構稱為Pandas的數據幀(data frame),類型全稱:pandas.core.frame.DataFrame.
pandas的兩個主要數據結構:Series和DataFrame:
[python]view plain
只顯示結果的末尾5行
[html]view plain
查看DataFrame的形狀,注意第一列的叫索引,和資料庫某個表中的第一列類似。
(200,4)
3、分析數據
特徵:
響應:
在這個案例中,我們通過不同的廣告投入,預測產品銷量。因為響應變數是一個連續的值,所以這個問題是一個回歸問題。數據集一共有200個觀測值,每一組觀測對應一個市場的情況。
注意:這里推薦使用的是seaborn包。網上說這個包的數據可視化效果比較好看。其實seaborn也應該屬於matplotlib的內部包。只是需要再次的單獨安裝。
[python]view plain
[html]view plain
[html]view plain
[python]view plain
結果顯示如下:
4、線性回歸模型
優點:快速;沒有調節參數;可輕易解釋;可理解。
缺點:相比其他復雜一些的模型,其預測准確率不是太高,因為它假設特徵和響應之間存在確定的線性關系,這種假設對於非線性的關系,線性回歸模型顯然不能很好的對這種數據建模。
線性模型表達式:y=β0+β1x1+β2x2+...+βnxn其中
在這個案例中:y=β0+β1∗TV+β2∗Radio+...+βn∗Newspaper
(1)、使用pandas來構建X(特徵向量)和y(標簽列)
scikit-learn要求X是一個特徵矩陣,y是一個NumPy向量。
pandas構建在NumPy之上。
因此,X可以是pandas的DataFrame,y可以是pandas的Series,scikit-learn可以理解這種結構。
[python]view plain
輸出結果如下:
[python]view plain
輸出的結果如下:
(2)、構建訓練集與測試集
[html]view plain
#default split is 75% for training and 25% for testing
[html]view plain
輸出結果如下:
註:上面的結果是由train_test_spilit()得到的,但是我不知道為什麼我的版本的sklearn包中居然報錯:
處理方法:1、我後來重新安裝sklearn包。再一次調用時就沒有錯誤了。
2、自己寫函數來認為的隨機構造訓練集和測試集。(這個代碼我會在最後附上。)
(3)sklearn的線性回歸
[html]view plain
輸出的結果如下:
[html]view plain
輸出如下:
y=2.668+0.0464∗TV+0.192∗Radio-0.00349∗Newspaper
如何解釋各個特徵對應的系數的意義?
對於給定了Radio和Newspaper的廣告投入,如果在TV廣告上每多投入1個單位,對應銷量將增加0.0466個單位。就是加入其它兩個媒體投入固定,在TV廣告上每增加1000美元(因為單位是1000美元),銷量將增加46.6(因為單位是1000)。但是大家注意這里的newspaper的系數居然是負數,所以我們可以考慮不使用newspaper這個特徵。這是後話,後面會提到的。
(4)、預測
[python]view plain
[python]view plain
輸出結果如下:
5、回歸問題的評價測度
(1) 評價測度
對於分類問題,評價測度是准確率,但這種方法不適用於回歸問題。我們使用針對連續數值的評價測度(evaluation metrics)。
這里介紹3種常用的針對線性回歸的測度。
1)平均絕對誤差(Mean Absolute Error, MAE)
(2)均方誤差(Mean Squared Error, MSE)
(3)均方根誤差(Root Mean Squared Error, RMSE)
這里我使用RMES。
[python]view plain
最後的結果如下:
(2)做ROC曲線
[python]view plain
顯示結果如下:(紅色的線是真實的值曲線,藍色的是預測值曲線)
直到這里整個的一次多元線性回歸的預測就結束了。
6、改進特徵的選擇
在之前展示的數據中,我們看到Newspaper和銷量之間的線性關系竟是負關系(不用驚訝,這是隨機特徵抽樣的結果。換一批抽樣的數據就可能為正了),現在我們移除這個特徵,看看線性回歸預測的結果的RMSE如何?
依然使用我上面的代碼,但只需修改下面代碼中的一句即可:
[python]view plain
# print the first 5 rowsprint X.head()# check the type and shape of Xprint type(X)print X.shape
最後的到的系數與測度如下:
LinearRegression(_X=True, fit_intercept=True, normalize=False)
然後再次使用ROC曲線來觀測曲線的整體情況。我們在將Newspaper這個特徵移除之後,得到RMSE變小了,說明Newspaper特徵可能不適合作為預測銷量的特徵,於是,我們得到了新的模型。我們還可以通過不同的特徵組合得到新的模型,看看最終的誤差是如何的。
備註:
之前我提到了這種錯誤:
註:上面的結果是由train_test_spilit()得到的,但是我不知道為什麼我的版本的sklearn包中居然報錯:
處理方法:1、我後來重新安裝sklearn包。再一次調用時就沒有錯誤了。
2、自己寫函數來認為的隨機構造訓練集和測試集。(這個代碼我會在最後附上。)
這里我給出我自己寫的函數: