1、使用scatter_matrix判斷個特征的數據分布及其關系
散步矩陣(scatter_matrix)
Pandas中散步矩陣的函數原理
1 def scatter_matrix(frame, alpha=0.5, figsize=None, ax=None, diagonal='hist', marker='.', density_kwds=None,hist_kwds=None, range_padding=0.05, **kwds)
參數如下:
- frame:(DataFrame),DataFrame對象
- alpha:(float,可選),圖像透明度,一般取(0,1]
- figsize:((float,float),可選),以英寸單位的圖像大小,一般以元組(width,height)形式設置
- ax:(Matplotlib axis object,可選),一般取None
- diagonal:({"hist","kde"}),必須只能從這兩個中選一個,"hist"表示直方圖(Histogram plot),“kde”表示核密度估計(Kernel Density Estimation);該參數是scatter_matrix函數的關鍵參數
- marker:(str,可選),Matplotlib可用的標記類型,如:‘,’,‘.’,‘o’
- density_kwds:(other plotting keyword argumentss,可選),與kde相關的字典參數
- hist_kwds:(other plotting keyword arguments,可選),與hist相關的字典參數
- range_padding:(float,可選),圖像在x軸,y軸原點附近的留白(padding),該值越大,留白距離越大,圖像遠離坐標原點
- kwds:(other plotting keyword argumentss,可選)與scatter_matrix函數本身相關的字典參數
kde值
diagonal參數取’kde’值時,表示散布矩陣的對角線上的圖形為數據集各特征的核密度估計(Kernel Density Estimation,KDE)。核密度估計是在概率論中用來估計未知的密度函數,屬於非參數檢驗方法之一。簡單來說,核密度估計就是在當前數據集(連續型數據樣本)已知的情況下,通過計算來獲取該樣本分布的概率密度函數;在計算獲取時需要用到核函數,如Gaussian Kernel Density、Exponential Kernel Density、Cosine Kernel Density等,不同核函數可以得到樣本整體趨勢和密度分布規律性基本一致的結果;影響該結果的還包括帶寬(bandwidth),帶寬值過大或過小都會影響估計結果;
---- 來自 Felix_YU_Q 的CSDN 博客 ,全文地址請點擊:https://blog.csdn.net/hurry0808/article/details/78573585?utm_source=copy
步驟:
1、導入模塊:pandas、matplotlib
2、讀取數據
3、為項目設置matplotlib參數
設置參數有兩種方法:調用命令matplotlib.rc();通過傳入關鍵字元組,修改參數
使用參數字典:matplotlib.rcparams;
為了能讓matplotlib能正常顯示中文和能正常顯示符號,需調用以下語句
matplotlib.rcParams['font.sans-serif']=['SimHei'] #用來正常顯示正文
matplotlib.rcParams['axes.unicode_minus']=False #用來正常顯示負號
4、使用scatter_matrix畫圖
1 import pandas 2 import matplotlib 3 4 data=pandas.read_csv( 5 "C:\\Users\\Jw\\Desktop\\python_work\\Python數據挖掘實戰課程課件\\4.3\\data.csv") 6 7 x=data[["等級"]] 8 y=data[["資源"]] 9 10 font={ 11 "family":"SimHei"} 12 13 matplotlib.rc('font', **font); 14 matplotlib.rcParams["axes.unicode_minus"]=False 15 16 from pandas.tools.plotting import scatter_matrix 17 18 scatter_matrix( 19 data[["等級", "資源"]], 20 alpha=0.8,figsize=(10,10),diagonal="kde")
2、根據得到的圖形與已經的模型對比
scatter_matrix得到的kde圖符合一元二次方程,與一元二次方程進行對比
1 import numpy; 2 x_ = numpy.arange(-10, 10, 0.01); 3 y_ = x_**2 4 5 from matplotlib import pyplot as plt; 6 7 plt.figure(); 8 plt.title('等級與資源') 9 plt.xlabel('等級') 10 plt.ylabel('資源') 11 plt.grid(True) 12 plt.plot(x_, y_, 'k.') 13 plt.show()
與scatter_matrix得到的相符合,degree設置為2
3、使用PolynomialFeaturess來構建特征
它是使用多項式的方法來進行的,如果有a,b兩個特征,那么他的2次多項式為(1,a,b,a^2,b^2)
PolynomialFeatures有三個參數:
degree:空值多項式的度
interaction_only:默認為False,如果指定為True,那么就不會有特征自己和自己結合的項,上面的二次項中沒有a^2,b^2
include_bias:默認為True,如果為True的話,就會有上面的1 那一項
解決方法:
把一元非線性方程轉化為多元一次方程;
確定了一元非線性方程中的n,就可以作為degree傳入PolynomialFeatures類;
預測的時候不能直接使用轉換前的因變量作為參數傳入模型,需要fit_transform轉換才能進行預測
1 from sklearn.linear_model import LinearRegression 2 from sklearn.preprocessing import PolynomialFeatures 3 4 5 pf=PolynomialFeatures(degree=2) 6 x_2_fit=pf.fit_transform(x) #一元二次的方程就轉化為二元一次的方程 7 8 lrModel=LinearRegression() 9 lrModel.fit(x_2_fit,y) 10 11 lrModel.score(x_2_fit,y) #模型擬合程度 12 13 x_2_predict=pf.fit_transform([[21],[22]]) 14 lrModel.predict([[21],[22]])
小結:
一元n次方程,轉換為多元線性方程:
pf=sklearn.preprocessing.PolynomialFeatures(degree=2)
轉換方法:
x_2_fit=pf.fit_trasform(x)
預測:
LinearRegression().predict(x_2_fit)