天天看點

邏輯回歸—分類問題的操作順序

對于二進制分類問題來說,分類的結果和資料的特征之間仍呈現相關關系,但是y的值不再是連續的,是0~1的躍遷。但是在這個過程中,什麼仍然是連續的呢?”是機率,機率是逐漸升高的,當達到一個關鍵點(門檻值),機率就超過了0.5。那麼從這個點開始,之後y的預測值都為1。

文章目錄

    • 1. 導入CSV檔案
    • 2.如果是二進制分類,看一下分類比例
    • 3.畫圖
    • 4. 建構特征集和标簽集
    • 5. 拆分資料集為訓練集和測試集
    • 6.對資料集進行歸一化(用或不用均可,都用看看誰的準确率高)
    • 7.使用啞特征
    • 7. 使用邏輯回歸建立模型

1. 導入CSV檔案

import numpy as np # 導入Num Py庫

import pandas as pd # 導入Pandas庫

df_heart = pd.read_csv('/kaggle/input/myheart/heart.csv') # 讀取檔案

df_heart.head() # 顯示前5行資料
           

2.如果是二進制分類,看一下分類比例

如果非二進制分類,可以忽略

如果兩種分類的總數相差很大,那麼說明資料集很差

3.畫圖

可以畫熱力圖,适用于字段少的情況,代碼:

import matplotlib.pyplot as plt #Matplotlib為Python畫圖工具庫

import seaborn as sns #Seaborn為統計學資料可視化工具庫

#對所有的标簽和特征兩兩顯示其相關性的熱力圖

sns.heatmap(df_heart.corr(), cmap='YlGnBu', annot = True)

plt.show() #plt代表英文plot, 就是畫圖的意思
           
邏輯回歸—分類問題的操作順序

也可以畫散點圖,可以判斷兩個字段

plt.scatter(x=df_heart.age[df_heart.target==1],

y=df_heart.thalach[(df_heart.target==1)], c='red')

plt.scatter(x=df_heart.age[df_heart.target==0],

y=df_heart.thalach[(df_heart.target==0)], marker='^')

plt.legend(['Disease', 'No Disease']) # 顯示圖例

plt.xlabel('Age') # x軸标簽

plt.ylabel('Heart Rate') # y軸标簽
plt.show()
           
邏輯回歸—分類問題的操作順序

4. 建構特征集和标簽集

特征集就是自變量集,标簽集就是因變量集

X = df_heart.drop(['判斷的列名'], axis = 1) # 建構特征集

y = df_heart.判斷的列名.values # 建構标簽集

y = y.reshape(-1, 1) # -1是相對索引, 等價于len(y)

print('張量X的形狀:', X.shape)

print('張量X的形狀:', y.shape)
           

5. 拆分資料集為訓練集和測試集

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2)
           

6.對資料集進行歸一化(用或不用均可,都用看看誰的準确率高)

這步就是把所有值都變成0-1

from sklearn.preprocessing import MinMaxScaler # 導入資料縮放器

scaler = MinMaxScaler() # 選擇歸一化資料縮放器Min Max Scaler

X_train = scaler.fit_transform(X_train) # 特征歸一化訓練集fit_transform

X_test = scaler.transform(X_test) # 特征歸一化測試集transform
           

y_train, y_test因為原本就是非0即1是以不用歸一化,否則仍然需要

訓練集和測試集使用不同的方法歸一化

7.使用啞特征

就是比如一個字段有4種取值,0,1,2,3分别是代表不同類型,和大小無關,但是如果直接把那些字段建立模型,可能會把數字以大小判斷,解決方案就是可以變成多4個字段,每個字段用1或0,

如這種類型

邏輯回歸—分類問題的操作順序

變成

邏輯回歸—分類問題的操作順序

這樣做之後會發現模型的準确率将有顯著的提升

7. 使用邏輯回歸建立模型

模型就是函數的意思

from sklearn.linear_model import LogisticRegression #導入邏輯回歸模型

lr = LogisticRegression() # lr, 就代表是邏輯回歸模型

lr.fit(X_train, y_train) # fit, 就相當于是梯度下降

print('SK learn邏輯回歸測試準确率{:.2f}%'.format(lr.score(X_test, y_test)*100))