1.安装配置
conda install scipy=0.19.0
查看库的版本
import scipy
import numpy
import matplotlib
import pandas
import sklearn
print('scipy:{}'.format(scipy.__version__))
print('numpy:{}'.format(numpy.__version__))
print('matplotlib:{}'.format(matplotlib.__version__))
print('pandas:{}'.format(pandas.__version__))
print('sklean:{}'.format(sklearn.__version__))
2.导入库和数据集,查看数据基本信息
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
filename='iris.data.csv'
names=['separ-length','separ-width','petal-length','petal-width','class']
dataset=read_csv(filename,names=names)
# 查看数据维度
print('数据维度:%s 行, %s 列' % dataset.shape)
# 查看数据前五行
print(dataset.head(5))
# 查看数据描述信息
print(dataset.describe())
# 分类分布情况
print(dataset.groupby('class').size())
3.数据可视化
# 箱线图 子图-subplots
dataset.plot(kind='box',subplots=True,layout=(2,2),sharex=False,sharey=False)
pyplot.show()
# 直方图
dataset.hist()
pyplot.show()
# 散点矩阵图
scatter_matrix(dataset)
pyplot.show()
4.评估算法
(1)分离出训练数据集和评估数据集
# 分离数据集 80%训练 20%测试
# X为0,1,2,3列;Y为第4列
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)
(2)采用10折交叉验证来评估算法模型
(3)生成6个不同的模型来预测新数据
# 算法审查
models={}
models['LR']=LogisticRegression()
models['LDA']=LinearDiscriminantAnalysis()
models['KNN']=KNeighborsClassifier()
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()))
这段代码是在使用不同的机器学习算法对数据进行训练和评估。下面是每一行代码的详细解释:
-
models={}
: 创建一个空字典,用于存储不同的机器学习模型。 -
models['LR']=LogisticRegression()
等:向字典中添加各种机器学习模型。这里添加了六种模型,包括逻辑回归(LR)、线性判别分析(LDA)、K最近邻(KNN)、决策树(CART)、高斯朴素贝叶斯(NB)和支持向量机(SVM)。 -
results=[]
:创建一个空列表,用于存储每个模型的交叉验证结果。 -
for key in models:
:遍历字典中的每个模型。 -
kfold=KFold(n_splits=10,random_state=seed)
:使用K折交叉验证方法对数据进行分割。这里将数据分割成10份,random_state
参数确保每次运行代码时数据的分割方式相同。 -
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()))
:打印每个模型的平均准确率和标准差。这可以帮助我们了解哪个模型的性能最好。
总的来说,这段代码的目的是比较不同机器学习算法在给定数据集上的性能,以便选择最佳模型进行预测。
(4)选择最优模型
# 箱线图比较算法
fig=pyplot.figure()
fig.suptitle('Algorithm Comparsion')
ax=fig.add_subplot(111)
pyplot.boxplot(results)
ax.set_xticklabels(models.keys())
pyplot.show()
这段代码是用来生成一个箱线图,用于比较不同机器学习算法的性能。下面是每一行代码的详细解释:
-
fig=pyplot.figure()
:创建一个新的图形。 -
fig.suptitle('Algorithm Comparsion')
:设置图形的标题为"Algorithm Comparsion"。 -
ax=fig.add_subplot(111)
:在图形中添加一个子图。111
表示子图的位置和大小。 -
pyplot.boxplot(results)
:生成一个箱线图,其中results
是之前存储每个模型交叉验证结果的列表。 -
ax.set_xticklabels(models.keys())
:设置x轴的标签为模型的名称。 -
pyplot.show()
:显示图形。
总的来说,这段代码的目的是通过可视化的方式比较不同机器学习算法在给定数据集上的性能,以便更直观地选择最佳模型进行预测。在箱线图中,每个模型都有一个箱子,箱子的上下边界分别表示第一四分位数(Q1)和第三四分位数(Q3),箱子中间的线表示中位数(Q2)。箱子上下延伸出去的线称为“胡须”,表示数据的范围,而箱子外面的点则表示离群点。这样就可以清楚地看出每个模型性能的分布和离群情况。
5.使用评估数据集评估算法
# 使用评估数据集评估算法
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))