python简单机器学习数学建模2

基于鸢尾花数据集进行简单机器学习。附上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

其中主要有四个库,matplotlibpyplot 模块用于数据可视化,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():生成详细的分类报告,包括精确率、召回
  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值