在台大李宏毅老师的讲座里有提到一个使用AdaBoost分类器学习初音未来轮廓的例子。这里用scikit-learn工具包提供的AdaBoost算法进行了实现。
import pandas as pd
import numpy as np
from PIL import Image
以下读入原始数据,转成图片后显示出来:
原始数据下载地址(http://speech.ee.ntu.edu.tw/~tlkagk/courses/MLDS_2015_2/theano/miku)
miku = pd.read_csv('/home/eric/Documents/MachineLearning/Algorithms/Adaboost/miku.csv')
miku = np.array(miku.values)
miku_grayscale = miku[:, 2]
miku_grayscale = miku_grayscale.reshape((500, 500))
miku_grayscale = miku_grayscale.transpose()
image = Image.fromarray(miku_grayscale*255)
image.show()
以下使用最大深度为5的决策树作为基分类器进行AdaBoost训练,训练结果转成图片显示出来,通过调整不同数量的基分类器,AdaBoost算法可以取得不同的效果。
from sklearn.ensemble import AdaBoostClassifier
from sklearn.tree import DecisionTreeClassifier
clf = AdaBoostClassifier(DecisionTreeClassifier(max_depth=5), n_estimators=100)
miku_data = miku[:, 0:2]
miku_target = miku[:, 2]
clf.fit(miku_data, miku_target)
predict = clf.predict(miku_data)
#print predict.shape
predict = predict.reshape((500, 500))
predict = predict.transpose()
image_pre = Image.fromarray(predict*255)
image_pre.show()
分类学习结果:
10个基分类器:
20个基分类器:
50个基分类器:
100个基分类器: