天天看點

機器學習入門資料集--5.皮馬人糖尿病預測資料集

在本項目的前期訓練中,資料最後的結果都不理想。是以在代碼中引入了多種資料模型:邏輯回歸、高斯樸素貝葉斯、K近鄰分類、決策樹分類、支援向量機分類、xgboost。在訓練集上,最高準确率為77%。

資料解析

  • 資料名稱:pima_indians-diabetes.csv
  • 來源

    https://www.kaggle.com/uciml/pima-indians-diabetes-database#diabetes.csv

    https://github.com/susanli2016/Machine-Learning-with-Python/blob/master/diabetes.csv

    美國亞利桑那州的⽐馬印第安⼈患糖尿病機率極⾼。WHO為此調查了21歲以上的⼥性患者,并記錄了以下資訊:

列名 解釋
Pregnancies 懷孕了⼏次
Glucose ⾎糖
BloodPressure ⾎壓
SkinThickness ⽪脂厚度
Insulin 胰島素
BMI 體質指數
DiabetesPedigreeFunction 糖尿病⾎統
Age 年齡
Outcome label:是否患病

資料分析

沒有缺失值,而且全部是數字類型

Pregnancies                 768 non-null int64
Glucose                     768 non-null int64
BloodPressure               768 non-null int64
SkinThickness               768 non-null int64
Insulin                     768 non-null int64
BMI                         768 non-null float64
DiabetesPedigreeFunction    768 non-null float64
Age                         768 non-null int64
Outcome                     768 non-null int64           

複制

訓練

在本項目的前期訓練中,資料最後的結果都不理想。是以在代碼中引入了多種資料模型:邏輯回歸、高斯樸素貝葉斯、K近鄰分類、決策樹分類、支援向量機分類、xgboost。在訓練集上,最高準确率為77%。

from sklearn.linear_model import LogisticRegression
import pandas as  pd
import numpy as np

df = pd.read_csv("/Users/wangsen/ai/13/homework/diabetes.csv")
df.info()
target = df.pop("Outcome")
data = df.values
print(data[:5])

lr = LogisticRegression()
lr.fit(data,target)
score = lr.score(data,target)
print("訓練集上的預測準确率",score)

from sklearn.feature_selection import SelectKBest 
from sklearn.feature_selection import chi2

select_top_4 = SelectKBest(score_func=chi2, k =4)
select_top_4.fit(data,target)
data_4 = select_top_4.transform(data)           

複制

結果:'Glucose','Insulin','BMI','Age'

from sklearn.preprocessing import StandardScaler
X = StandardScaler().fit_transform(data_4)
X = data
y = target
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.naive_bayes import GaussianNB
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC
from xgboost import XGBClassifier
import sklearn

models = []
models.append(("LR", LogisticRegression())) #邏輯回歸
models.append(("NB", GaussianNB())) # 高斯樸素貝葉斯
models.append(("KNN", KNeighborsClassifier(10))) #K近鄰分類
models.append(("DT", DecisionTreeClassifier())) #決策樹分類
models.append(("SVM", SVC())) # 支援向量機分類
models.append(("xgboost", XGBClassifier())) # xgboost
'''
estimator:資料對象 
X:資料 
y:預測資料 
soring:調用的方法
cv:交叉驗證生成器或可疊代的次數 
n_jobs:同時工作的cpu個數(-1代表全部)
verbose:詳細程度
fit_params:傳遞給估計器的拟合方法的參數
pre_dispatch:控制并行執行期間排程的作業數量。
'''
results = []
names = []
for name, model in models:
    kflod = KFold(n_splits=10, random_state=22)
    cv_result = cross_val_score(model, X,y, cv = kflod,scoring="accuracy")
    names.append(name)
    results.append(cv_result)
 
for i in range(len(names)):
    print(names[i], results[i].mean())           

複制

結果:

LR 0.7695146958304853
NB 0.7551777170198223
KNN 0.74865003417635
DT 0.6952494873547506
SVM 0.6510252904989747
xgboost 0.7668660287081339           

複制

參考資料:

機器學習入門資料集--5.皮馬人糖尿病預測資料集
  1. keras https://www.kesci.com/home/project/5a5b691046c4ba639c6fbfa2
  2. 多種 機器學習https://blog.csdn.net/weixin_41988628/article/details/83051712