天天看點

【Python算法】分類與預測——logistic回歸分析

1.logistic回歸定義

logistic回歸是一種廣義線性回歸(generalized linear model),是以與多重線性回歸分析有很多相同之處。它們的模型形式基本上相同,都具有 w‘x+b,其中w和b是待求參數,其差別在于他們的因變量不同,多重線性回歸直接将w‘x+b作為因變量,即y =w‘x+b,而logistic回歸則通過函數L将w‘x+b對應一個隐狀态p,p =L(w‘x+b),然後根據p 與1-p的大小決定因變量的值。如果L是logistic函數,就是logistic回歸,如果L是多項式函數就是多項式回歸。

【Python算法】分類與預測——logistic回歸分析

logistic回歸的因變量可以是二分類的,也可以是多分類的,但是二分類的更為常用,也更加容易解釋,多類可以使用softmax方法進行處理。實際中最為常用的就是二分類的logistic回歸。

2.作業系統

  操作機:Linux_Ubuntu

  操作機預設使用者:root

3.實驗工具

【Python算法】分類與預測——logistic回歸分析

Python是一種計算機程式設計語言。是一種動态的、面向對象的腳本語言,最初被設計用于編寫自動化腳本(shell),随着版本的不斷更新和語言新功能的添加,越來越多被用于獨立的、大型項目的開發。Python已經成為最受歡迎的程式設計語言之一。自從2004年以後,python的使用率呈線性增長。2011年1月,它被TIOBE程式設計語言排行榜評為2010年度語言。

由于Python語言的簡潔性、易讀性以及可擴充性,在國外用Python做科學計算的研究機構日益增多,一些知名大學已經采用Python來教授程式設計課程。例如卡耐基梅隆大學的程式設計基礎、麻省理工學院的計算機科學及程式設計導論就使用Python語言講授。

衆多開源的科學計算軟體包都提供了Python的調用接口,例如著名的計算機視覺庫OpenCV、三維可視化庫VTK、醫學圖像處理庫ITK。而Python專用的科學計算擴充庫就更多了,例如如下3個十分經典的科學計算擴充庫:NumPy、SciPy和matplotlib,它們分别為Python提供了快速數組處理、數值運算以及繪圖功能。是以Python語言及其衆多的擴充庫所構成的開發環境十分适合工程技術、科研人員處理實驗資料、制作圖表,甚至開發科學計算應用程式。

4.Numpy

【Python算法】分類與預測——logistic回歸分析

NumPy系統是Python的一種開源的數值計算擴充。這種工具可用來存儲和處理大型矩陣,比Python自身的嵌套清單(nested list structure)結構要高效的多(該結構也可以用來表示矩陣(matrix))。

NumPy(Numeric Python)提供了許多進階的數值程式設計工具,如:矩陣資料類型、矢量處理,以及精密的運算庫。專為進行嚴格的數字處理而産生。多為很多大型金融公司使用,以及核心的科學計算組織如:Lawrence Livermore,NASA用其處理一些本來使用C++,Fortran或Matlab等所做的任務。

5.scikit-learn

【Python算法】分類與預測——logistic回歸分析

scikit-learn,Python 中的機器學習,簡單高效的資料挖掘和資料分析工具,可供大家使用,可在各種環境中重複使用,建立在 NumPy,SciPy 和 matplotlib 上開放源碼,可商業使用 - BSD license。

6.Matplotlib

【Python算法】分類與預測——logistic回歸分析

Matplotlib 是一個 Python 的 2D繪**,它以各種硬拷貝格式和跨平台的互動式環境生成出版品質級别的圖形。通過 Matplotlib,開發者可以僅需要幾行代碼,便可以生成繪圖,直方圖,功率譜,條形圖,錯誤圖,散點圖等。

7.pandas

【Python算法】分類與預測——logistic回歸分析

Python Data Analysis Library 或 pandas 是基于NumPy 的一種工具,該工具是為了解決資料分析任務而建立的。Pandas 納入了大量庫和一些标準的資料模型,提供了高效地操作大型資料集所需的工具。pandas提供了大量能使我們快速便捷地處理資料的函數和方法。你很快就會發現,它是使Python成為強大而高效的資料分析環境的重要因素之一。

8.導入所需要的庫:numpy,matplotlib.pyplot,pandas

代碼如下:

# Importing the libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd      

9.加載資料集

代碼如下:

# Importing the dataset
dataset = pd.read_csv('/mnt/dataset_29/Social_Network_Ads_82e4aa0627105a2d22b70d7ad0bfeda0.csv')   注意:資料集以實際位置為準
X = dataset.iloc[:, [2, 3]].values
y = dataset.iloc[:, 4].values      

注意:實驗中以資料集的具體為準。

【Python算法】分類與預測——logistic回歸分析

如下給出資料,可将資料建立響相應的資料集用于字日常訓練,也可在實驗平台中資料集子產品下的的“社交網絡資料集”中進行檢視。

資料集如下:(見附件)

10.将資料集分割為訓練集和測試集

# Splitting the dataset into the Training set and Test set
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)      

11.特征縮放

# Feature Scaling
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)      
【Python算法】分類與預測——logistic回歸分析

12.使用邏輯回歸對資料進行處理

from sklearn.linear_model import LogisticRegression
classifier = LogisticRegression()
classifier.fit(X_train, y_train)      
【Python算法】分類與預測——logistic回歸分析

13.對測試集進行分類

# Predicting the Test set results
y_pred = classifier.predict(X_test)      

14.制造混淆矩陣評估分類器性能

from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)      

15.繪制訓練集和測試集

繪制訓練集資料結果:

from matplotlib.colors import ListedColormap
X_set,y_set=X_train,y_train
X1,X2=np. meshgrid(np. arange(start=X_set[:,0].min()-1, stop=X_set[:, 0].max()+1, step=0.01),
                   np. arange(start=X_set[:,1].min()-1, stop=X_set[:,1].max()+1, step=0.01))
plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(),X2.ravel()]).T).reshape(X1.shape),
             alpha = 0.75, cmap = ListedColormap(('red', 'green')))
plt.xlim(X1.min(),X1.max())
plt.ylim(X2.min(),X2.max())
for i,j in enumerate(np. unique(y_set)):
    plt.scatter(X_set[y_set==j,0],X_set[y_set==j,1],
                c = ListedColormap(('red', 'green'))(i), label=j)

plt. title(' LOGISTIC(Training set)')
plt. xlabel(' Age')
plt. ylabel(' Estimated Salary')
plt. legend()
plt. show()      
【Python算法】分類與預測——logistic回歸分析

給測試集資料分類:

X_set,y_set=X_test,y_test
X1,X2=np. meshgrid(np. arange(start=X_set[:,0].min()-1, stop=X_set[:, 0].max()+1, step=0.01),
                   np. arange(start=X_set[:,1].min()-1, stop=X_set[:,1].max()+1, step=0.01))

plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(),X2.ravel()]).T).reshape(X1.shape),
             alpha = 0.75, cmap = ListedColormap(('red', 'green')))
plt.xlim(X1.min(),X1.max())
plt.ylim(X2.min(),X2.max())
for i,j in enumerate(np. unique(y_set)):
    plt.scatter(X_set[y_set==j,0],X_set[y_set==j,1],
                c = ListedColormap(('red', 'green'))(i), label=j)

plt. title(' LOGISTIC(Test set)')
plt. xlabel(' Age')
plt. ylabel(' Estimated Salary')
plt. legend()
plt. show()      

繼續閱讀