在本項目的前期訓練中,資料最後的結果都不理想。是以在代碼中引入了多種資料模型:邏輯回歸、高斯樸素貝葉斯、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
複制
參考資料:
- keras https://www.kesci.com/home/project/5a5b691046c4ba639c6fbfa2
- 多種 機器學習https://blog.csdn.net/weixin_41988628/article/details/83051712