实验任务:
Iris数据集是机器学习任务中常用的分类实验数据集,由Fisher在1936收集整理。Iris中文名是安德森鸢尾花卉数据集,英文全称是Anderson’s Iris data set,是一类多重变量分析的数据集。Iris一共包含150个样本,分为3类,每类50个数据,每个数据包含4个属性。可通过花萼长度,花萼宽度,花瓣长度,花瓣宽度4个属性预测鸢尾花卉属于(Setosa,Versicolour,Virginica)三个种类中的哪一类。
具体要求:
- 导入数据:从sklearn库加载该数据集。
- 数据探索性分析:可包括但不限于:查看数据的信息、数据维度、特征取值、特征的分布情况,特征之间的相关性等。
- 划分数据集:将数据集划分为训练集和测试集。
- 数据建模:
- 使用LinearSVC和SVC构建模型;
- 利用网格搜索进行超参数调优,如:对SVC中的参数“C”、“kernel”等,确定最优超参数。
- 模型效果评估:输出评价指标。
实践代码
导入数据
from sklearn import datasets
iris = datasets.load_iris()
数据探索性分析
# 数据探索性分析
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# 转换为 DataFrame
iris_df = pd.DataFrame(data=iris.data, columns=iris.feature_names)
iris_df['target'] = iris.target
# 数据信息
print(iris_df.info())
# 数据维度
print(iris_df.shape)
# 特征取值和分布情况
print(iris_df.describe())
sns.pairplot(iris_df, hue='target')
plt.show()
# 特征之间的相关性
print(iris_df.corr())
sns.heatmap(iris_df.corr(), annot=True)
plt.show()
划分数据集
# 划分数据集
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=42)
数据建模
from sklearn.svm import LinearSVC, SVC
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import classification_report
# 使用 LinearSVC 建模
linear_svc = LinearSVC()
linear_svc.fit(X_train, y_train)
y_pred = linear_svc.predict(X_test)
print("LinearSVC Model Evaluation:\n", classification_report(y_test, y_pred))
# 使用 SVC 建模并进行超参数调优
parameters = {'kernel':('linear', 'rbf'), 'C':[1, 10, 100]}
svc = SVC()
clf = GridSearchCV(svc, parameters)
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
print("SVC Model Evaluation with GridSearchCV:\n", classification_report(y_test, y_pred))
print("Best Parameters:\n", clf.best_params_)
模型效果评估
# 模型效果评估
from sklearn.metrics import accuracy_score, confusion_matrix
# LinearSVC 效果评估
print("LinearSVC Accuracy: ", accuracy_score(y_test, y_pred))
print("LinearSVC Confusion Matrix:\n", confusion_matrix(y_test, y_pred))
# SVC 效果评估
print("SVC Accuracy: ", accuracy_score(y_test, y_pred))
print("SVC Confusion Matrix:\n", confusion_matrix(y_test, y_pred))