一、确保你的python安装了这些包
#Check the versions of libraries#Python version
importsysprint('Python: {}'.format(sys.version))#scipy
importscipyprint('scipy: {}'.format(scipy.__version__))#numpy
importnumpyprint('numpy: {}'.format(numpy.__version__))#matplotlib
importmatplotlibprint('matplotlib: {}'.format(matplotlib.__version__))#pandas
importpandasprint('pandas: {}'.format(pandas.__version__))#scikit-learn
importsklearnprint('sklearn: {}'.format(sklearn.__version__))
如果电脑都安装了,会有如下输出:
Python: 3.7.1 (default, Dec 10 2018, 22:54:23) [MSC v.1915 64bit (AMD64)]
scipy:1.1.0
numpy:1.15.4matplotlib:3.0.2pandas:0.23.4sklearn:0.20.1
Scipy是一个用于数学、科学、工程领域的常用软件包,可以处理插值、积分、优化、图像处理、常微分方程数值解的求解、信号处理等问题。它用于有效计算Numpy矩阵,使Numpy和Scipy协同工作,高效解决问题。
NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
Matplotlib 是 Python 编程语言及其数值数学扩展包 NumPy 的可视化操作界面。它为利用通用的图形用户界面工具包。
pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
sklearn是机器学习中常用的第三方模块,对常用的机器学习方法进行了封装,包括回归(Regression)、降维(Dimensionality Reduction)、分类(Classfication)、聚类(Clustering)等方法。
二、下面是鸢尾花的模型分析:
importpandas as pdfrom pandas.plotting importscatter_matriximportmatplotlib.pyplot as pltfrom sklearn importmodel_selectionfrom sklearn.metrics importclassification_reportfrom sklearn.metrics importconfusion_matrixfrom sklearn.metrics importaccuracy_scorefrom sklearn.linear_model importLogisticRegressionfrom sklearn.tree importDecisionTreeClassifierfrom sklearn.neighbors importKNeighborsClassifierfrom sklearn.discriminant_analysis importLinearDiscriminantAnalysisfrom sklearn.naive_bayes importGaussianNBfrom sklearn.svm importSVCimportwarnings#将鸢尾花数据集导入
input_file = "F://python入门//文件//Iris数据集//iris.csv"f=open(input_file)
names= ['Sepal_Length','Sepal_Width','Petal_Length','Petal_Width','Species']
dataset= pd.read_csv(f, names=names)#查看数据的形状属性,多少行,多少列
print('查看数据的形状属性:')print(dataset.shape)#查看数据的前十行
print('查看数据的前十行:')print(dataset.head(10))#查看数据的统计性描述
print('查看数据的统计性描述:')print(dataset.describe())#输出箱线图
print('查看每个输入变量的箱线图:')
dataset.plot(kind='box', subplots=True, layout=(2,2), sharex=False, sharey=False)
plt.show()#输出一个直方图
print('查看每个输入变量的直方图:')
dataset.hist()
plt.show()#散点图
print('全部属性对的散点图:')
scatter_matrix(dataset)
plt.show()#将导入的数据集拆分为两部分,80% 用于训练模型,20% 用于验证模型。
array =dataset.values
X= array[:,0:4]
Y= array[:,4]
validation_size= 0.20seed= 7
#训练集和验证集
X_train, X_validation, Y_train, Y_validation =\
model_selection.train_test_split(X, Y,test_size=validation_size, random_state=seed)#每次运行算法前都要重新设置随机数量的种子,以确保是在用相同的数据拆分来评估每个算法#现在我们用“准确率”这个维度去评估模型,也就是能正确预测出鸢尾花类别的比例
seed = 7
#用准确率这个维度评估模型
scoring = 'accuracy'
#逻辑回归(LR)#线性判别分析(LDA)#K最近邻算法(KNN)#分类和回归树(CART)#高斯朴素贝叶斯(NB)#支持向量机(SVM)
models =[]
models.append(('LR', LogisticRegression(solver='liblinear')))
models.append(('LDA', LinearDiscriminantAnalysis()))
models.append(('KNN', KNeighborsClassifier()))
models.append(('CART', DecisionTreeClassifier()))
models.append(('NB', GaussianNB()))
models.append(('SVM', SVC()))#evaluate each model in turn
results =[]
names=[]#遍历每个方法
print('输出每个方法的均值和标准差:')for name, model inmodels:
kfold= model_selection.KFold(n_splits=10, random_state=seed)
cv_results= model_selection.cross_val_score(model, X_train, Y_train, cv=kfold, scoring=scoring)
results.append(cv_results)
names.append(name)
msg= "%s: %f (%f)" %(name, cv_results.mean(), cv_results.std())print(msg)#消除警告
warnings.filterwarnings("ignore")#用箱线图将模型评估结果表示出来
fig =plt.figure()
fig.suptitle('Algorithm Comparison')
ax= fig.add_subplot(111)
plt.boxplot(results)
ax.set_xticklabels(names)print('利用箱线图衡量各模型方法的准确率:')
plt.show()#经过验证,KNN 算法的准确率最高。现在我们看看该模型在验证集上的准确度。
knn =KNeighborsClassifier()
knn.fit(X_train, Y_train)
predictions=knn.predict(X_validation)#模型的准确率
print('模型的准确率:')print(accuracy_score(Y_validation, predictions))#混淆矩阵
print('混淆矩阵:')print(confusion_matrix(Y_validation, predictions))#分类报告显示了每个类别的精确率、召回率、F1 值
print('分类报告:')print(classification_report(Y_validation, predictions))
输出结果:
查看数据的形状属性:
(150, 5)
查看数据的前十行:
Sepal_Length Sepal_Width Petal_Length Petal_Width Species
05.1 3.5 1.4 0.2setosa1 4.9 3.0 1.4 0.2setosa2 4.7 3.2 1.3 0.2setosa3 4.6 3.1 1.5 0.2setosa4 5.0 3.6 1.4 0.2setosa5 5.4 3.9 1.7 0.4setosa6 4.6 3.4 1.4 0.3setosa7 5.0 3.4 1.5 0.2setosa8 4.4 2.9 1.4 0.2setosa9 4.9 3.1 1.5 0.1setosa
查看数据的统计性描述:
Sepal_Length Sepal_Width Petal_Length Petal_Width
count150.000000 150.000000 150.000000 150.000000mean5.843333 3.057333 3.758000 1.199333std0.828066 0.435866 1.765298 0.762238min4.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.800000max7.900000 4.400000 6.900000 2.500000
查看每个输入变量的箱线图:

查看每个输入变量的直方图:

全部属性对的散点图:

输出每个方法的均值和标准差:
LR:0.966667 (0.040825)
LDA:0.975000 (0.038188)
KNN:0.983333 (0.033333)
CART:0.966667 (0.040825)
NB:0.975000 (0.053359)
SVM:0.991667 (0.025000)
利用箱线图衡量各模型方法的准确率:

模型的准确率:0.9混淆矩阵:
[[70 0]
[ 011 1]
[ 02 9]]
分类报告:
precision recall f1-score support
setosa1.00 1.00 1.00 7versicolor0.85 0.92 0.88 12virginica0.90 0.82 0.86 11micro avg0.90 0.90 0.90 30macro avg0.92 0.91 0.91 30weighted avg0.90 0.90 0.90 30