声明:
1、作者水平有限,代码仅供参考,有误请指正
2、报错可能是因为没有安装相应的库,或读取数据有误
目录
实验一
一、题目
1、数据集名称:帕尔默企鹅数据集
2、数据集情况:
(1)以下对数据集字段的说明可供参考:
①Species:种类,如Gentoo:巴布亚企鹅;Adelie:阿德利企鹅;Chinstrap:帽带企鹅
②culmen_length_mm:喙长(毫米)
③culmen_depth_mm :喙深(毫米)
④flipper_length_mm :鳍状肢长度(毫米)
⑤body_mass_g 体重(克)
⑥islan:岛屿名称,如梦想岛、托尔格森岛、比斯科岛
⑦sex:企鹅的性别
(2)部分样本含有缺失值 NA
3、数据集下载链接:
https://www.kaggle.com/datasets/parulpandey/palmer-archipelago-antarctica-penguin-data(下载的是一个压缩包,用penguins_size.csv就足够了)
任务1:分别使用逻辑回归、SVM、卷积神经网络三种分类算法中对企鹅种类进行分类
任务2:使用异质集成学习算法进行分类
任务3:对各种分类算法自行进行优化,并将采用的方法的结果进行实验对比
二、代码
1、逻辑回归
import pandas as pd
from sklearn.preprocessing import LabelEncoder, StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix
import seaborn as sns
import matplotlib.pyplot as plt
#读企鹅数据
df=pd.read_csv("penguins_size.csv")
print("原数据集\n",df)
#1、数据预处理
#删除缺失值
df=df.dropna()
print("删除缺失值之后的数据集\n",df)
#2、特征工程
#a.把字符串变量换成数字标签
label_encoder=LabelEncoder()
df['species']=label_encoder.fit_transform(df['species'])
df['island']=label_encoder.fit_transform(df['island'])
df['sex']=label_encoder.fit_transform(df['sex'])
#b.把喙长等数字特征进行标准化处理
scaler=StandardScaler()
df[['culmen_length_mm', 'culmen_depth_mm', 'flipper_length_mm', 'body_mass_g']]=scaler.fit_transform(df[['culmen_length_mm', 'culmen_depth_mm', 'flipper_length_mm', 'body_mass_g']])
#c.特征列存为x,目标列存为y
x=df.drop('species',axis=1)
y=df['species']
#d.数据集分为训练集(80%)和测试集(20%),设置random_state,使得划分相同,方便比较三种算法
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2,random_state=9)
#3、构建模型
#a.逻辑回归————建模
model_lr=LogisticRegression()#优化,model_lr=LogisticRegression(C=1, solver='liblinear')
model_lr.fit(x_train, y_train)
lr_pred=model_lr.predict(x_test)
#a.逻辑回归————评估性能=准确率+分类报告+混淆矩阵
accuracy_a=accuracy_score(y_test,lr_pred)
report_a=classification_report(y_test,lr_pred)
matrix_a=confusion_matrix(y_test,lr_pred)
print("逻辑回归————评估性能")
print("逻辑回归——准确率=",accuracy_a)
print("逻辑回归——分类报告\n",report_a)
print("逻辑回归——混淆矩阵\n",matrix_a)
#4、实验结果(可视化与结论)
#解决中文乱码问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
#a.逻辑回归————画图
#新建一个df_a,存逻辑回归测试集预测的species
df_lr=pd.DataFrame(x_test)
df_lr["species"]=lr_pred
#图————喙长VS喙深
#创建画布
fig,(ax1,ax2)=plt.subplots(ncols=2,figsize=(12,6))
#图1,原数据集
sns.scatterplot(data=df,hue="species",x="culmen_length_mm",y="culmen_depth_mm",ax=ax1)
ax1.set(title="原数据集",xlabel="喙长",ylabel="喙深")
#图2,逻辑回归
sns.scatterplot(data=df_lr,hue="species",x="culmen_length_mm",y="culmen_depth_mm",ax=ax2)
ax2.set(title="逻辑回归",xlabel="喙长",ylabel="喙深")
#图————鳍状肢长度VS体重
#创建画布
fig,(ax3,ax4)=plt.subplots(ncols=2,figsize=(12,6))
#图1,原数据集
sns.scatterplot(data=df,hue="species",x="flipper_length_mm",y="body_mass_g",ax=ax3)
ax3.set(title="原数据集",xlabel="鳍状肢长度",ylabel="体重")
#图2,逻辑回归
sns.scatterplot(data=df_lr,hue="species",x="flipper_length_mm",y="body_mass_g",ax=ax4)
ax4.set(title="逻辑回归",xlabel="鳍状肢长度",ylabel="体重")
2、支持向量机SVM
import pandas as pd
from sklearn.preprocessing import LabelEncoder, StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix
import seaborn as sns
import matplotlib.pyplot as plt
#读企鹅数据
df=pd.read_csv("penguins_size.csv")
print("原数据集\n",df)
#1、数据预处理
#删除缺失值
df=df.dropna()
print("删除缺失值之后的数据集\n",df)
#2、特征工程
#a.把字符串变量换成数字标签
label_encoder=LabelEncoder()
df['species']=label_encoder.fit_transform(df['species'])
df['island']=label_encoder.fit_transform(df['island'])
df['sex']=label_encoder.fit_transform(df['sex'])
#b.把喙长等数字特征进行标准化处理
scaler=StandardScaler()
df[['culmen_length_mm', 'culmen_depth_mm', 'flipper_length_mm', 'body_mass_g']]=scaler.fit_transform(df[['culmen_length_mm', 'culmen_depth_mm', 'flipper_length_mm', 'body_mass_g']])
#c.特征列存为x,目标列存为y
x=df.drop('species',axis=1)
y=df['species']
#d.数据集分为训练集(80%)和测试集(20%),设置random_state,使得划分相同,方便比较三种算法
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2,random_state=9)
#3、构建模型
#b.SVM————建模
model_SVM=SVC()#优化,model_SVM = SVC(kernel='rbf', C=2, gamma='scale')
model_SVM.fit(x_train,y_train)
SVM_pred=model_SVM.predict(x_test)
#b.SVM———评估性能=准确率+分类报告+混淆矩阵
accuracy_SVM=accuracy_score(y_test,SVM_pred)
report_SVM=classification_report(y_test, SVM_pred)
matrix_SVM=confusion_matrix(y_test,SVM_pred)
print("SVM————评估性能")
print("SVM——准确率=", accuracy_SVM)
print("SVM——分类报告\n", report_SVM)
print("SVM——混淆矩阵\n", matrix_SVM)
#4、实验结果(可视化与结论)
#解决中文乱码问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
#b.逻辑回归————画图
#新建一个df_SVM,存SVM预测的species
df_SVM=pd.DataFrame(x_test)
df_SVM["species"]=SVM_pred
#图————喙长VS喙深
#创建画布
fig,(ax1,ax2)=plt.subplots(ncols=2,figsize=(12,6))
#图1,原数据集
sns.scatterplot(data=df,hue="species",x="culmen_length_mm",y="culmen_depth_mm",ax=ax1)
ax1.set(title="原数据集",xlabel="喙长", ylabel="喙深")
#图2,SVM
sns.scatterplot(data=df_SVM,hue="species",x="culmen_length_mm",y="culmen_depth_mm",ax=ax2)
ax2.set(title="SVM",xlabel="喙长", ylabel="喙深")
# 图————鳍状肢长度VS体重
# 创建画布
fig, (ax3, ax4) = plt.subplots(ncols=2, figsize=(12, 6))
# 图1,原数据集
sns.scatterplot(data=df, hue="species", x="flipper_length_mm", y="body_mass_g", ax=ax3)
ax3.set(title="原数据集", xlabel="鳍状肢长度", ylabel="体重")
# 图2,SVM
sns.scatterplot(data=df_SVM, hue="species", x="flipper_length_mm", y="body_mass_g", ax=ax4)
ax4.set(title="SVM", xlabel="鳍状肢长度", ylabel="体重")
3、卷积神经网络cnn
import pandas as pd
import numpy as np
import tensorflow as tf
from