初识机器学习

利用机器学习的预测模型来解决问题共有六个基本步骤,如下
1.定义问题:研究和提炼问题的特征,以帮助我们更好地理解项目的目标。
2.数据理解:通过描述性统计和可视化来分析现有的数据。
3.数据准备:对数据进行格式化,以便于构建一个预测模型。
4.评估算法:通过一定的方法分离一部分数据,用来评估算法模型,并选取一部分代表数据进行分析,以改善模型。
5.优化模型:通过调参和集成算法提升预测结果的准确度。
6.结果部署:完成模型,并执行模型来预测结果和展示。

机器学习中的Hello World项目——鸢尾花分类项目
(1)导入数据

filename='iris.data.csv'
names=['separ-length','separ-width','petal-length','petal-width','class']
dataset=read_csv(filename,names=names)

(2)概述数据
a.数据的维度

print('数据维度:行 %s,列 %s' % dataset.shape)

b.查看数据自身

print(dataset.head(10))

c.统计描述所有的数据特征
数据特征的统计描述信息包括数据的行数,中位值,最大值,最小值,均值,四分位值等统计数据信息。

print(dataset.describe())

d.数据分类的分布情况

print(dataset.groupby('class').size())

如果数据分布不平衡时候,可能会影响到模型的准确度。因此,当数据分布不平衡时候,需要对数据进行处理,调整数据到相对平衡的状态。调整数据平衡时有以下几种方法:
(1)扩大数据样本:这是一个容易被忽视的选择。一个更大的数据集,就有可能挖掘出不同的或许更平衡的方面提高算法模型的准确度。
(2)数据的重新抽样:过抽样(复制少数类样本)和欠抽样(删除多数类样本)。当数据量很大时可以考虑测试欠抽样(大于一万条记录),当数据理比较少时候可以考虑过抽样。
(3)尝试生成人工样本:一种简单的生成人工样本的方法是从少数类的实例中随机抽样特征属性,生成更多的数据。
(4)异常检测和变化检测:尝试用不同的观点进行思考,以解决问题。异常检测是对罕见事件的检测。这种思维的转变在于考虑以小类作为异常值类,它可以帮助获得一种新方法来分离和分类样本。

(3)数据可视化
通过对数据集的审查,对数据有了一个基本的了解,之后用图表来进一步查看数据特征的分布情况和数据不同特征之间的相互关系。
a.使用单变量图表可以更好地理解每一个特征属性
b.多变量图表用于理解不同特征属性之间的关系

3.1单变量图表

#箱线图
dataset.plot(kind='box',subplots=True,layout=(2,2),sharex=False,sharey=False)
pyplot.show()
#直方图
dataset.hist()
pyplot.show()

3.2多变量图表
通过多变量图表可以查看不同特征属性之间的关系。可以通过散点矩阵图来查看每个属性之间的影响关系。

#散点矩阵图
scatter_matrix(dataset)
pyplot.show()

(4)评估算法
通过不同的算法来创建模型,并评估它们的准确度,以便找到最合适的算法。将按照下面的步骤进行操作:
a.分离出评估数据集

array=dataset.values
X=array[:,0:4]//所有行,0到4列
Y=array[:,4]//所有行,第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)

b.采用10折交叉验证来评估算法模型
通过十折交叉验证来分离训练数据集,并评估算法模型的准确度。10折交叉验证时随机地将数据分成10份:9份用来训练模型,1份用来评估算法。
c.生成6个不同的模型来预测新数据
通过前面的图表,发现有些数据特征符合线性分布,评估六种不同的算法:
线性回归(LR)
线性判别分析(LDA)
K近邻(KNN)
分类与回归树(CART)
贝叶斯分类器(NB)
支持向量机(SVM)

#算法审查
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)//k折交叉
   cv_results=cross_val_score(models[key],X_train,Y_train,cv=kfold,scoring='accuracy')//scoring可以设置评分所用函数种类
   results.append(cv_results)
   print('%s: %f (%f)' %(key,cv_results.mean(),cv_results.std()))//std()标准差,反应组内的个体离散程度,标准差越小越好

d.选择最优模型

#箱线图比较算法
fig=pyplot.figure()
fig.suptitle('Algorithm Comparison')
ax = fig.add_subplot(111)//fig.add_subplot(111)表示第一行第一列第一个
pyplot.boxplot(results)
ax.set_xticklabels(models.keys())
pyplot.show()

(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))

猜你喜欢

转载自blog.csdn.net/heloiselt/article/details/80641797
今日推荐