對于二進制分類問題來說,分類的結果和資料的特征之間仍呈現相關關系,但是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))