基于鸢尾花数据集进行简单机器学习。附上python代码。
鸢尾花数据集链接:鸢尾花数据集(完整版)_数据集-飞桨AI Studio星河社区 (baidu.com)
一.导入类库
#导入类库
import matplotlib.pyplot as pyplot
import pandas as pd
from pandas.plotting import scatter_matrix
from sklearn.model_selection import train_test_split
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.neighbors import KNeighborsClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.svm import SVC
from sklearn.impute import SimpleImputer
import numpy as np
其中主要有四个库,matplotlib
的 pyplot
模块用于数据可视化,pandas
库用于数据操作和分析,sklearn
模块用于机器学习,numpy
库用于数值计算。
二.加载与查看数据
1.导入数据
# 导入数据集
file_name = "C:/Users/XRJ/Desktop/python学习/iris.csv"
#数据特征
names = ["sepal-length", "sepal-width", "petal-length", "petal-width", "class"]
#读入数据集
dataset = pd.read_csv(file_name, names=names)
2.查看前十行与数据的维度
print("数据维度:行 %s,列 %s" % dataset.shape)
# 看一下数据的前十行
print(dataset.head(10))
三.数据的描述性统计,可视化和类型检查
1.数据的描述性统计
# 描述性统计
print(dataset.describe())
# 数据分布情况
print(dataset.groupby('class').size())
print(dataset.dtypes)
dataset.describe()
:生成数据的描述性统计信息,包括均值、标准差、最小值、四分位数等。dataset.groupby('class').size()
:按类别分组并输出每个类别的样本数量。dataset.dtypes
:输出数据集中每一列的数据类型。
2.类型检查
# 将需要转换的列名列表化
columns_to_convert = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width']
# 使用 pd.to_numeric 将这些列转换为数值类型
for column in columns_to_convert:
dataset[column] = pd.to_numeric(dataset[column], errors='coerce')
# 检查转换后的数据类型
print(dataset.dtypes)
这里相对于原版本的代码进行了改进,将指定列的数据转换为数值类型,如果转换失败,使用 NaN
填充
3.数据可视化
# 数据可视化
# 箱线图
dataset.plot(kind='box', subplots=True, layout=(2,2), sharex=False, sharey=False)
pyplot.show()
# 直方图
dataset.hist()
pyplot.show()
# 散点图矩阵
scatter_matrix(dataset)
pyplot.show()
- 绘制每个特征的箱线图,帮助了解数据的分布和可能的异常值。
- 绘制每个特征的直方图,查看数据的频率分布。
- 绘制散点图矩阵,以观察特征之间的关系和可能的线性关系。
四.分割数据集
#分割数据集
array = dataset.values
X = array[:, 0:4]
Y = array[:, 4]
validation_size = 0.2
seed = 7
# 使用 SimpleImputer 处理 NaN 值
imputer = SimpleImputer(strategy='mean')
X = imputer.fit_transform(X)
X_train, X_validation, Y_train, Y_validation = train_test_split(X, Y, test_size=validation_size, random_state=seed)
我们设置验证集占数据集的20%,取前四列作为自变量,第五列作为因变量,并设置随机种子,以保证结果可重复,与原代码不同的是,我们用均值替换‘X’中的缺失值。
五.创建与评估模型
1.创建多个模型
# 创建模型字典
models = {}
models['LR'] = LogisticRegression()
models['KNN'] = KNeighborsClassifier()
models['LDA'] = LinearDiscriminantAnalysis()
models['CART'] = DecisionTreeClassifier()
models['SVM'] = SVC()
models['NB'] = GaussianNB()
# 评估每个模型
results = []
for key in models:
kfold = KFold(n_splits=10, shuffle=True, random_state=seed) # 交叉检验
cv_results = cross_val_score(models[key], X_train, Y_train, cv=kfold, scoring='accuracy')
results.append(cv_results)
print('%s: %f (%f)' % (key, cv_results.mean(), cv_results.std()))
我们先创建一个包含多个分类模型的字典‘models’,其中每个模型使用不同的分类算法
并使用K折交叉验证评估每个模型的准确性,结果保存在 results
列表中,并输出每个模型的平均准确率和标准差。
2.用支持向量机模型进行训练和预测
svm=SVC()
svm.fit(X_train,Y_train)
predictions=svm.predict(X_validation)
print(accuracy_score(Y_validation,predictions))
print(confusion_matrix(Y_validation,predictions))
print(classification_report(Y_validation,predictions))
创建一个支持向量机分类器 SVC
实例,并用训练集数据进行训练,用训练好的模型对验证集进行预测。输出的三个评估分别是
accuracy_score()
:计算模型的准确率。confusion_matrix()
:输出混淆矩阵,显示预测结果的详细分布。classification_report()
:生成详细的分类报告,包括精确率、召回