乳腺癌數據是sklearn中自帶的數據集,需要通過相關特征對是否患有乳腺癌進行分類。
數據清洗與建模
首先加載相關庫和相關數據
from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LogisticRegression
import numpy as np
import pandas as pd#加載數據
bcdata = load_breast_cancer()
# 轉成dataFrame格式,方便查看
df_data = pd.DataFrame(bcdata.data, columns=bcdata.feature_names)
df_data['targe'] = bcdata.target
df_data.head()
通過運行的結果可以看出這個數據集有30個自變量,包括半徑,緊密度,面積等相關數據,并同時包括對應指標的平均值,最大值,最小值。而target列為結果列,0 表示惡性,1 表示良性。數據集共569條記錄,均沒有缺失數據
接下來將數據分為測試集和訓練集
from sklearn.model_selection import train_test_split
X_train,X_test,y_train, y_test=train_test_split(bcdata.data,bcdata.target,test_size=0.3)
在這里直接使用sklearn中的邏輯回歸LogisticRegression()建模,其官網地址為https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html,其語法和參數為:
model = LogisticRegression(penalty='l2', dual=False, tol=0.0001, C=1.0, fit_intercept=True, intercept_scaling=1, class_weight=None, random_state=None, solver='lbfgs', max_iter=100, multi_class='auto', verbose=0, warm_start=False, n_jobs=None, l1_ratio=None)
對應的參數為:
- penalty:指定懲罰(正則化項)類型,用于避免過擬合,可以是 ‘l1’、‘l2’、‘elasticnet’ 或 ‘none’。
- C:正則化強度的倒數,較小的值指定更強的正則化。
- fit_intercept:指定是否應該向決策函數中添加常數項(也稱截距)。
- intercept_scaling:僅在使用求解器 ‘liblinear’ 且
fit_intercept
為 True 時有用。當特征值相差很大時,此參數有助于穩定 ‘liblinear’ 的收斂。 - class_weight:用于標示各個類別的權重,通常用于處理類別不平衡的問題。如果不設置,則所有類的權重都為 1。
- random_state:是隨機數生成器的種子。在需要重現結果的情況下用于初始化中心。
- solver:指定在優化問題中使用的算法,如 ‘liblinear’、‘newton-cg’、‘lbfgs’、‘sag’ 和 ‘saga’。
- max_iter:求解器內部迭代的最大次數,即優化算法的迭代次數。
- multi_class:如果是多類(非二分類)問題,則指定用于多類策略的算法,可以是 ‘ovr’(一對剩余)或 ‘multinomial’。
- verbose:對于某些求解器,正整數的
verbose
參數可以用于顯示求解器中的進程信息。 - warm_start:設為True時,使用前一個調用的解決方案作為初始化,否則,只是擦除前一個解決方案。
- n_jobs:用于指定并行作業的數量。
None
意味著1,而-1意味著使用所有處理器。 - l1_ratio:僅在
penalty='elasticnet'
時使用,這是Elastic-Net混合參數,其中 0 <= l1_ratio <= 1。
本例中是最簡單的二分類,所以直接調用,參數直接采用默認的參數
clf = LogisticRegression()
clf.fit(X_train,y_train)
這里直接運行會發現會有一個警告:
這是因為使用了默認的lbfgs算法且參數的迭代次數達到了限制(默認max_iter=100),但是兩次迭代參數變化還是比較大,仍然沒有在一個很小的閾值以下,這就叫沒有收斂。
這個時候的選擇有 :1.忽略, 2.增大最大迭代次數, 3.更換其他的模型或者那個參數solver, 4.將數據進行預處理,提取更有用的特征。這里重點是講解邏輯回歸的使用,所以我們直接忽略不細聊具體的參數
邏輯回歸模型評價
邏輯回歸模型是一個分類模型,所以采用一般的分類模型評價指標即可。常用的分類模型評價指標可參考https://blog.csdn.net/qq_42692386/article/details/147896278
這里直接使用sklearn中的score函數,對于分類任務其返回的是準確率
score=clf.score(X_test,y_test)
score#結果為0.9122807017543859
也可以直接計算準確率,和score函數結果一致
print( "模型準確率:",(clf_y_predict== y_test).sum()/len(y_test))