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 importpandas2 importmatplotlib3
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"]=False15
16 from pandas.tools.plotting importscatter_matrix17
18 scatter_matrix(19 data[["等級", "資源"]],20 alpha=0.8,figsize=(10,10),diagonal="kde")

2、根據得到的圖形與已經的模型對比
scatter_matrix得到的kde圖符合一進制二次方程,與一進制二次方程進行對比
1 importnumpy;2 x_ = numpy.arange(-10, 10, 0.01);3 y_ = x_**2
4
5 from matplotlib importpyplot 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 importLinearRegression2 from sklearn.preprocessing importPolynomialFeatures3
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)