1 介绍
帕尔默企鹅数据集是分类问题,每一列的含义如下:
- species 离散值 标签信息,值为 Adelie|Chinstrap|Gentoo 之一
- island 离散值 岛屿,值为 Torgersen|Biscoe|Dream 之一
- culmen_length_mm 连续值 喙的长度(mm)
- culmen_depth_mm 连续值 喙的高度(mm)
- flipper_length_mm 连续值 脚蹼长度(mm)
- body_mass_g 连续值 体重(克)
- sex 离散值 性别,值为 MALE| FEMALE 之一
如果有需要,可以联系:https://docs.qq.com/doc/DWEtRempVZ1NSZHdQ
2 导入包
import numpy as np
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC
from sklearn.neighbors import KNeighborsClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
np.random.seed(123)
3 导入数据,打印数据信息
data = pd.read_csv("penguins_size.csv")
print(data.head())
print(data.info())
print(data.shape)
# 查看相关系数
print(data.corr())
4 缺失值处理,使用impute
print(data.isnull().sum())
#缺失值填补
from sklearn.impute import SimpleImputer
imputer = SimpleImputer(strategy='most_frequent')
data.iloc[:,:] = imputer.fit_transform(data)
处理前:
处理后:
5 特征编码
from sklearn.preprocessing import LabelEncoder
data["species"] = LabelEncoder().fit_transform(data["species"])
data["island"] = LabelEncoder().fit_transform(data["island"])
data["sex"] = LabelEncoder().fit_transform(data["sex"])
6 划分标签特征,训练集测试集
x = data.drop(["species"],axis=1)
y = data["species"]
X_train, X_test, y_train, y_test = train_test_split(x, y,train_size=0.7,shuffle = True, random_state=123)
7 归一化
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler() #归一化
scaler.fit(X_train)
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)
8 模型训练和验证
model_list = [DecisionTreeClassifier(), SVC(),KNeighborsClassifier(),RandomForestClassifier()]
for model in model_list:
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
acc = round(accuracy_score(y_test, y_pred), 4)
print("model:{} acc:{}".format(model, acc))
model:DecisionTreeClassifier() acc:0.9327
model:SVC() acc:0.9904
model:KNeighborsClassifier() acc:0.9904
model:RandomForestClassifier() acc:0.9904