该笔记为个人学习笔记,看的课程是B站-数学建模老哥:2、机器学习数学建模项目入门_哔哩哔哩_bilibili
目录
基于鸢尾花数据集进行简单机器学习。附上python代码。
鸢尾花数据集链接:鸢尾花数据集(完整版)_数据集-飞桨AI Studio星河社区 (baidu.com)
一、导入类库
from pandas import read_csv # pandas 数据分析库
from pandas.plotting import scatter_matrix #数据可视化
from matplotlib import pyplot
from sklearn.model_selection import train_test_split # sklearn机器学习库
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
二、导入数据集
# 1、导入数据集
filename = 'D:/桌面/数学建模_机器学习/iris.csv' #根据自己的目录写
# 数据集特征
names = ['SepalLengthCm', 'SepalWidthCm', 'PetalLengthCm', 'PetalWidthCm', 'class']
# 导入为自己的数据集
dataset = read_csv(filename, names=names)
三、概述数据
1、数据的维度
# 打印数据维度
print('数据维度:行%s,列%s'%dataset.shape) #数据维度:行151,列5
2、查看数据自身
# 打印数据集前10行
print(dataset.head(10))
3、统计描述
#描述性统计
print(dataset.describe())
4、数据分类的情况
#数据分布情况
print(dataset.groupby('class').size())
四、数据可视化
# 3、数据可视化
dataset.plot(kind='box', subplots=True, layout=(2, 2), sharex=False,
sharey=False) # 箱线图 subplots--多个图 layout--按照2行2列摆放 sharex--保留x轴
dataset.hist() # 直方图
scatter_matrix(dataset) # 散点图
pyplot.show()
五、评估算法
1、分离出评估数据集
# 4、分离数据集 八二分
array = dataset.values
# XY轴分离
X = array[:, 0:4] # 前四列
Y = array[:, 4]
validation_size = 0.2 # 测试集占20%
seed = 7 # 种子随机在7个模式
X_train, X_validation, Y_train, Y_validation = train_test_split(X, Y, test_size=validation_size, random_state=seed,
shuffle=True)
2、生成6种新模型预测新数据
models = {}
models['LR'] = LogisticRegression() # 逻辑回归模型
models['KNN'] = KNeighborsClassifier() # K最近邻
models['LDA'] = LinearDiscriminantAnalysis() # 线性判别分析
models['CART'] = DecisionTreeClassifier() # 分类与回归树(决策树)
models['SVM'] = SVC() # 支持向量机
models['NB'] = GaussianNB() # 朴素贝叶斯(高斯分布)
3、训练
# 训练
results = []
# 每个值在6个模型里面循环
for key in models:
kflod = KFold(n_splits=10, random_state=seed, shuffle=True) # 10次随机交叉检验
cv_results = cross_val_score(models[key], X_train, Y_train, cv=kflod, scoring='accuracy') # 导出每个模型的准确度
results.append(cv_results)
print('%s:%f(%f)' % (key, cv_results.mean(), cv_results.std()))
六、评估
# 评估
print('评估......exe....')
svm = SVC()
svm.fit(X_train, Y_train) # fit方法用于训练模型,接收训练数据的特征集和标签集作为输入
predictions = svm.predict(X_validation) # 使用训练好的SVM模型对验证数据特征集X_validation进行预测,得到预测结果predictions
print(accuracy_score(Y_validation, predictions)) # 计算并打印模型在验证集上的准确度,即预测正确的样本数占总样本数的比例
print(confusion_matrix(Y_validation, predictions)) # 打印混淆矩阵,它显示了实际类别与预测类别之间的关系
print(classification_report(Y_validation, predictions)) # 打印分类报告,它包含了主要分类指标的详细文本报告,如精确度、召回率、F1分数等
七、总代码
from pandas import read_csv # pandas 数据分析库
from pandas.plotting import scatter_matrix # 数据可视化
from matplotlib import pyplot
from sklearn.model_selection import train_test_split # sklearn机器学习库
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
# 1、导入数据集
filename = 'D:/桌面/数学建模_机器学习/iris.csv'
# 数据集特征
names = ['SepalLengthCm', 'SepalWidthCm', 'PetalLengthCm', 'PetalWidthCm', 'class']
# 导入为自己的数据集
dataset = read_csv(filename, names=names)
# 打印数据维度
print('数据维度:行%s,列%s' % dataset.shape) # 数据维度:行151,列5
# 打印数据集前10行
print(dataset.head(10))
# 2、数据概述分析
# 描述性统计
print(dataset.describe())
# 数据分布情况
print(dataset.groupby('class').size())
# 3、数据可视化
dataset.plot(kind='box', subplots=True, layout=(2, 2), sharex=False,
sharey=False) # 箱线图 subplots--多个图 layout--按照2行2列摆放 sharex--保留x轴
dataset.hist() # 直方图
scatter_matrix(dataset) # 散点图
pyplot.show()
# 4、分离数据集 八二分
array = dataset.values
# XY轴分离
X = array[:, 0:4] # 前四列
Y = array[:, 4]
validation_size = 0.2 # 测试集占20%
seed = 7 # 种子随机在7个模式
X_train, X_validation, Y_train, Y_validation = train_test_split(X, Y, test_size=validation_size, random_state=seed,
shuffle=True)
# 算法
models = {}
models['LR'] = LogisticRegression() # 逻辑回归模型
models['KNN'] = KNeighborsClassifier() # K最近邻
models['LDA'] = LinearDiscriminantAnalysis() # 线性判别分析
models['CART'] = DecisionTreeClassifier() # 分类与回归树(决策树)
models['SVM'] = SVC() # 支持向量机
models['NB'] = GaussianNB() # 朴素贝叶斯(高斯分布)
# 训练
results = []
# 每个值在6个模型里面循环
for key in models:
kflod = KFold(n_splits=10, random_state=seed, shuffle=True) # 10次随机交叉检验
cv_results = cross_val_score(models[key], X_train, Y_train, cv=kflod, scoring='accuracy') # 导出每个模型的准确度
results.append(cv_results)
print('%s:%f(%f)' % (key, cv_results.mean(), cv_results.std()))
# 评估
print('评估......exe....')
svm = SVC()
svm.fit(X_train, Y_train) # fit方法用于训练模型,接收训练数据的特征集和标签集作为输入
predictions = svm.predict(X_validation) # 使用训练好的SVM模型对验证数据特征集X_validation进行预测,得到预测结果predictions
print(accuracy_score(Y_validation, predictions)) # 计算并打印模型在验证集上的准确度,即预测正确的样本数占总样本数的比例
print(confusion_matrix(Y_validation, predictions)) # 打印混淆矩阵,它显示了实际类别与预测类别之间的关系
print(classification_report(Y_validation, predictions)) # 打印分类报告,它包含了主要分类指标的详细文本报告,如精确度、召回率、F1分数等