Python數據挖掘—迴歸—一元非線性迴歸

一、使用scatter_matrix判斷個特徵的數據分佈及其關係

散步矩陣(scatter_matrix)

Pandas中散步矩陣的函數原理python

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),帶寬值過大或太小都會影響估計結果;spa

---- 來自 Felix_YU_Q 的CSDN 博客 ,全文地址請點擊:https://blog.csdn.net/hurry0808/article/details/78573585?utm_source=copy .net

 

步驟:code

一、導入模塊:pandas、matplotliborm

二、讀取數據對象

三、爲項目設置matplotlib參數blog

  設置參數有兩種方法:調用命令matplotlib.rc();經過傳入關鍵字元組,修改參數資源

            使用參數字典:matplotlib.rcparams;unicode

 

  爲了能讓matplotlib能正常顯示中文和能正常顯示符號,需調用如下語句 

    matplotlib.rcParams['font.sans-serif']=['SimHei']   #用來正常顯示正文

    matplotlib.rcParams['axes.unicode_minus']=False    #用來正常顯示負號


四、使用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")

 

二、根據獲得的圖形與已經的模型對比

 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

三、使用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)

相關文章
相關標籤/搜索