1. 程式人生 > >python matplot美化+座標軸範圍設定等筆記

python matplot美化+座標軸範圍設定等筆記

一.sklearn評估


1.混淆矩陣

from sklearn.metrics import confusion_matrix
confusion_matrix(testLabel,pre_label)


2.大小類評估指標:精確率,召回率,f1得分

from sklearn.metrics import classification_report
classification_report(testLabel, pre_label)


3.交叉驗證

mode = GradientBoostingClassifier()
cross_val_score(mode, feaSet, inLabel, cv = 10, scoring = 'accuracy')


二.matplot 繪圖


1.設定座標軸標註


fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.bar(x, befor,  width=width, label='befor',color='b')


2.設定要顯示的座標軸座標

ax.set_xticks([1,2,3,4,5])
#設定對應座標的顯示文字,rotation為文字的順時針旋轉角度,fontsize為文字大小
ax.set_xticklabels(['one','two','three','four','five'],rotation=45,fontsize=12)
plt.show()


3.設定圖示標註


#loc表示位置
plt.legend(loc='lower right')


4.設定座標軸的顯示範圍


plt.xlim(0.5, 5.5)
plt.ylim(0.5, 1.0)


5.在圖中顯示文字標註


#三個引數分別為x,y,要顯示的內容
plt.text(xloc,yloc,str)


6.美化風格


plt.style.use('ggplot')


三.lgb特徵重要性


feim = pd.Series(gbm.feature_importance(),index=gbm.feature_name())
    feim = feim.sort_values(ascending=False)




四.機器學習距離度量


EuclideanDistance :歐式距離,0ρ = sqrt( (x1-x2)^2+(y1-y2)^2 )

ManhattanDistance :曼哈頓距離,兩個點在標準座標系上的絕對軸距總和,d(i,j)=|xi-xj|+|yi-yj|

ChebyshevDistance :切比雪夫距離,二個點之間的距離定義是其各座標數值差絕對值的最大值

MinkowskiDistance :閔可夫斯基距離,(∑|xi-yi|^p)^(1/p) (i=1,2,...n),p取1或2時的明氏距離是最為常用的,p=2即為歐氏距離,而p=1時則為曼哈頓距離


五.numpy要點


1.將值大於0.5的元素全部置為1


    tempA = np.array(wordcounts)
    tempA[ tempA > 0.5 ] = 1


六.python忽略warninig輸出


1.程式碼中

import warnings
warnings.filterwarnings('ignore')


2.命令列


python -W ignore file.py


3.python遍歷資料夾下面所有檔案


import os
os.listdir(jpgpath)


4.python刪除檔案


import os
filename = 'f:/123.txt'
if os.path.exist(filename):
  os.remove(filename)


七.sklearn輸出線性模型的特徵重要性

1.svm特徵重要性
mode = SVC()
mode.fit(trainset, trainlabel)
print( mode.._get_coef())


2.LinearRegression 係數向量與截距


    lrw = mode.coef_#係數向量
    lrb = mode.intercept_#截距




八.numpy中判斷兩個array是否相等


np.array_equal( np.array(newtestSet),np.array(testSet) )




九.python中字典的儲存與還原


      #儲存
        dict_name = {1:{1:2,3:4},2:{3:4,4:5}}
        f = open('temp.txt','w')
        f.write(str(dict_name))
        f.close()
        
        #讀取
        f = open('temp.txt','r')
        a = f.read()
        dict_name = eval(a)
        f.close()


十. sklearn線性特徵擴充


poly = PolynomialFeatures(2)
trainSet = poly.fit_transform(trainSet)




十一. 平均數編碼:針對高基數定性特徵


1. 一般情況下,針對定性特徵,我們只需要使用sklearn的OneHotEncoder或LabelEncoder進行編碼:
(data_df是一個pandas dataframe,每一行是一個training example,每一列是一個特徵)


from sklearn.preprocessing import OneHotEncoder, LabelEncoder
import numpy as np
import pandas as pd


le = LabelEncoder()
data_df['street_address'] = le.fit_transform(data_df['street_address'])


ohe = OneHotEncoder(n_values='auto', categorical_features='all', dtype=np.float64, sparse=True, handle_unknown='error')
one_hot_matrix = ohe.fit_transform(data_df['street_address'])


值得一提的是,LabelEncoder將n種類別編碼為從0到n-1的整數,雖然能夠節省記憶體和降低演算法的執行時間,但是隱含了一個假設:不同的
類別之間,存在一種順序關係。在具體的程式碼實現裡,LabelEncoder會對定性特徵列中的所有獨特資料進行一次排序,從而得出從原始輸入
到整數的對映。定性特徵的基數(cardinality)指的是這個定性特徵所有可能的不同值的數量。在高基數(high cardinality)的定性特
徵面前,這些資料預處理的方法往往得不到令人滿意的結果。主要原因:

1. LabelEncoder編碼高基數定性特徵,雖然只需要一列,但是每個自然數都具有不同的重要意義,對於y而言線性不可分。使用簡單模
型,容易欠擬合(underfit),無法完全捕獲不同類別之間的區別;使用複雜模型,容易在其他地方過擬合(overfit)。

2. OneHotEncoder編碼高基數定性特徵,必然產生上萬列的稀疏矩陣,易消耗大量記憶體和訓練時間,除非演算法本身有相關優化(SVM)


2. 在貝葉斯的架構下,利用所要預測的應變數(target variable),有監督地確定最適合這個定性特徵的編碼方式。在Kaggle的資料競賽
中,這也是一種常見的提高分數的手段。


十二 . 程式設計基礎知識

1. 就程式設計而言,可移植性表示什麼?
一個程式的移植性好,就是指它的原始碼不經修改就可以在多種不同的計算機系統上編譯成可成功執行的程式




2. 解釋原始碼檔案,目的碼檔案和可執行檔案之間的區別
原始碼檔案中包含程式設計師使用任何程式語言編寫的程式碼
目的碼檔案包含著機器語言程式碼,它並不需要完整的程式程式碼
可執行檔案包含著組成可執行程式的全部機器語言程式碼


3. 程式設計的7個主要步驟是什麼?
定義程式目標、編寫程式程式碼、編譯程式、執行程式、測試和除錯程式、維護和修改程式


4. 編譯器的主要任務是什麼?
編譯器把原始碼(例如,用c語言寫成的程式碼)轉換為機器語言程式碼,也稱物件程式碼


5. 聯結器的任務是什麼?
連結器把多個來源(例如,已編譯的原始碼,庫程式碼和啟動程式碼)的目的碼連線成一個單獨的可執行程式


十三. 核函式的作用
核函式的作用就是隱含著一個從低維空間到高維空間的對映,而這個對映可以把低維空間中線性不可分的兩類點變成線性可分的
核函式要滿足的條件稱為Mercer's condition。理論上,由於train set 是有限的,當我們把data投射到無限維度的空間上一定
可以在trainset上完美分類,至於在testset上應該選取(試試各種)合適的kernel function 來避免過擬合。


在機器學習中常用的核函式,一般有這麼幾類,也就是LibSVM中自帶的這幾類:
1) 線性:K(v_1,v_2)=<v_1,v_2>
2) 多項式:K(v_1,v_2)=(\gamma<v_1,v_2>+c)^n
3) Radial basis function:K(v_1,v_2)=\exp(-\gamma||v_1-v_2||^2)
4) Sigmoid:K(v_1,v_2)=\tanh(\gamma<v_1,v_2>+c)


十四. 繪製分類平面
#繪製分類平面
x1min,x1max = min(trainset[:,0]),max(trainset[:,0])     #特徵1的範圍
x2min,x2max = min(trainset[:,1]),max(trainset[:,1])     #特徵2的範圍
t1 = np.linspace(x1min,x1max,500)       #生成特徵1的網格點
t2 = np.linspace(x2min,x2max,500)       #生成特徵2的網格點
x1,x2 = np.meshgrid(t1,t2)              #得到所有的點
xtest = np.stack((x1.flat,x2.flat),axis=1)  #更改點的形狀
yhat = lrmode.predict(xtest)    #對網格點做預測
yhat = yhat.reshape(x1.shape)   #更改預測結果
plt.pcolormesh(x1,x2,yhat,alpha = 0.1)  #繪製等高線




plt.scatter(trainset[:,0],trainset[:,1],c=trainlabel,s=50)  #繪製原始點