Iris

编程入门 行业动态 更新时间:2024-10-08 05:21:29

<a href=https://www.elefans.com/category/jswz/34/1759323.html style=Iris"/>

Iris

0、前言:

  • 这部分是实现了《机器学习Python实践》第三章的项目内容
  • 实现这个项目的理由是首先检验基础环境配置是否ok,然后大概过一下机器学习算法从数据处理到算法实现是如何在python当中运行的。
  • 至于如何理解项目当中每一行代码是啥意思,这个目前不必纠结,后期通过图书的学习会继续深入。

1、机器学习概览:

  • 通过使用python平台来完成机器学习的任务,就可以在不同的项目中重复使用这种方法解决问题。
  • 利用机器学习的预测模型来解决问题的六个基本步骤:
    • 定义问题:研究和提炼问题的特征,帮助我们更好的理解项目的目标
    • 数据理解:通过描述性统计和可视化来分析现有的数据
    • 数据准备:对数据进行格式化,以便构建一个预测模型
    • 评估算法:通过一定的方法分离一部分数据,用来评估算法模型,并选取一部分代表数据进行分析,以改善模型
    • 优化模型:通过调参和集成算法提升预测结果的准确度
    • 结果部署:完成模型,并执行模型来预测结果和展示

2、代码

# 001、首先导入库
from pandas import read_csv
from pandas.plotting import scatter_matrix
from matplotlib import pyplot
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# 002、导入数据集
filename = r'iris.data.csv'
names = ['separ-length', 'separ-width', 'petal-length', 'petal-width', 'class']
dataset = read_csv(filename, names=names)print('==========================数据审查==========================')
# 001、查看数据维度
print('数据维度:行 %s,列 %s' % (dataset.shape))  # 数据维度:行 150,列 5# 002、查看数据前十行
print(dataset.head(10))
'''separ-length  separ-width  petal-length  petal-width        class
0           5.1          3.5           1.4          0.2  Iris-setosa
1           4.9          3.0           1.4          0.2  Iris-setosa
2           4.7          3.2           1.3          0.2  Iris-setosa
3           4.6          3.1           1.5          0.2  Iris-setosa
4           5.0          3.6           1.4          0.2  Iris-setosa
5           5.4          3.9           1.7          0.4  Iris-setosa
6           4.6          3.4           1.4          0.3  Iris-setosa
7           5.0          3.4           1.5          0.2  Iris-setosa
8           4.4          2.9           1.4          0.2  Iris-setosa
9           4.9          3.1           1.5          0.1  Iris-setosa'''print('=' * 40)
# 003、统计描述数据信息【包括:行数、中位值、最大值、最小值、均值、四分位值等】
print(dataset.describe())
'''separ-length  separ-width  petal-length  petal-width
count    150.000000   150.000000    150.000000   150.000000
mean       5.843333     3.054000      3.758667     1.198667
std        0.828066     0.433594      1.764420     0.763161
min        4.300000     2.000000      1.000000     0.100000
25%        5.100000     2.800000      1.600000     0.300000
50%        5.800000     3.000000      4.350000     1.300000
75%        6.400000     3.300000      5.100000     1.800000
max        7.900000     4.400000      6.900000     2.500000'''print('=' * 40)
# 004、数据分布【执行程序得到每个分类数据量的绝对的数值,可以检查各个分类的数据分布是否均衡】
print(dataset.groupby('class').size())
'''
class
Iris-setosa        50
Iris-versicolor    50
Iris-virginica     50
dtype: int64
总结:1、可以看到鸢尾花的三个亚属的数据各50条,分布非常平衡,如果数据分布不平衡,可能会影响到模型的准确度。因此,当数据分布不平衡时,需要对数据进行处理。2、数据不平衡时调整数据的方法:扩大数据样本、数据的重新抽样(数据量大的时候欠抽样【删】、数据量小的时候过抽样【复制】)、尝试生成人工样本、异常检测和变化检测。
'''print('=' * 40)
# 005、数据分布【执行程序得到每个分类数据量的绝对的数值,可以检查各个分类的数据分布是否均衡】
print(dataset.groupby('class').size())
'''
class
Iris-setosa        50
Iris-versicolor    50
Iris-virginica     50
dtype: int64'''print('==========================数据可视化==========================')
# 006、单变量图表【单变量图表可以显示每一个单独的特征属性,因为每个特征属性都是数字,通过箱线图展示属性与中位值的离散速度】
# dataset.plot(kind='box',subplots=True,layout=(2,2),sharex=False,sharey=False)
# pyplot.show()     #【结果见附录图1】print('=' * 40)
# 007、直方图【显示每个特征属性的分布状况】
# dataset.hist()
# pyplot.show()     #【结果见附录图2】print('=' * 40)
# 008、散点矩阵图【查看每个属性之间的影响关系】
# scatter_matrix(dataset)
# pyplot.show()     #【结果见附录图3】print('==========================评估算法==========================')
# 001、分离评估数据集【80%训练数据集,20%评估数据集】
array = dataset.values
X = array[:, 0:4]
Y = array[:, 4]
validation_size = 0.2
seed = 7
X_train, X_validation, Y_train, Y_validation = \train_test_split(X, Y, test_size=validation_size, random_state=seed)# 002、算法审查
models = {}
models['LR'] = LogisticRegression()  # 线性回归【线性】
models['LDA'] = LinearDiscriminantAnalysis()  # 线性判别分析【线性】
models['KNN'] = KNeighborsClassifier()  # K近邻【非线性】
models['CART'] = DecisionTreeClassifier()  # 分类与回归树【非线性】
models['NB'] = GaussianNB()  # 贝叶斯分类器【非线性】
models['SVM'] = SVC()  # 支持向量机【非线性】
results = []
for key in models:kfold = KFold(n_splits=10, 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()))
'''
LR: 0.966667 (0.040825)
LDA: 0.975000 (0.038188)
KNN: 0.983333 (0.033333)
CART: 0.975000 (0.038188)
NB: 0.975000 (0.053359)
SVM: 0.991667 (0.025000)
'''
# 003、通过箱线图比较算法
fig = pyplot.figure()
fig.suptitle('Algorithm Comparison')
ax = fig.add_subplot(111)
pyplot.boxplot(results)
ax.set_xticklabels(models.keys())
pyplot.show()       #【结果见附录图4】# 004、使用评估数据集评估算法
svm = SVC()
svm.fit(X=X_train, y=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))
'''
[[ 7  0  0][ 0 10  2][ 0  0 11]]precision    recall  f1-score   supportIris-setosa       1.00      1.00      1.00         7
Iris-versicolor       1.00      0.83      0.91        12Iris-virginica       0.85      1.00      0.92        11avg / total       0.94      0.93      0.93        30
'''

3、附录

  • 附录图1

  • 附录图2

  • 附录图3

  • 附录图4

  • 什么是箱线图:箱线图对数据分布均匀程度做定性分析,方差对数据分布均匀程度做定量分析。

更多推荐

Iris

本文发布于:2024-03-11 17:31:24,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1729504.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Iris

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!