[关闭]
@spiritnotes 2016-03-07T09:39:04.000000Z 字数 2591 阅读 2356

机器学习实践 -- Iris数据集

机器学习实践


获取

数据集本来就在sklearn,通过如下代码导入

  1. from sklearn import datasets
  2. data = datasets.load_iris()

取出来的数据为字典对象,可以查看其下面的keys:

  1. dict_keys(['data', 'feature_names', 'target', 'target_names', 'DESCR'])

样本分布为:

类别 样本数
versicolor 50
setosa 50
virginica 50

清理

通过数据分析未发现有NAN值,其值分布基本上符合正常。

  1. data_pd = pd.DataFrame(data.data)
  2. data_pd.describe()
  3. 0 1 2 3
  4. count 150.000000 150.000000 150.000000 150.000000
  5. mean 5.843333 3.054000 3.758667 1.198667
  6. std 0.828066 0.433594 1.764420 0.763161
  7. min 4.300000 2.000000 1.000000 0.100000
  8. 25% 5.100000 2.800000 1.600000 0.300000
  9. 50% 5.800000 3.000000 4.350000 1.300000
  10. 75% 6.400000 3.300000 5.100000 1.800000
  11. max 7.900000 4.400000 6.900000 2.500000

数据都齐全,无缺失值

可视化

采用Python代码进行可视化,分别通过sb.pairplot查看特征分布
irispairplot.png-76.2kB
从图中可以看到

同样violinplot如下:
irisvivo.png-57.5kB

降维

IsoMap

通过isomap降维后的数据如图所示:
iris_iso.png-17.8kB

PCA

采用2维PCA降维可见其三种不同数据之间有明显的分界,因此分类效果会很好
iris_pca.png-19.9kB
从能量图中可以看到2维已经占到接近98%了。
iris_pca_en.png-18.6kB

训练

对于该数据,我们考虑如下几种模型,寻找其最佳模型。

KNN

求解模型得

  1. (0.97999999999999998,
  2. KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',
  3. metric_params=None, n_jobs=1, n_neighbors=15, p=2,
  4. weights='distance'),
  5. {'n_neighbors': 15, 'weights': 'distance'})

决策树

求解最佳模型

  1. (0.96666666666666667,
  2. DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=10,
  3. max_features=None, max_leaf_nodes=None, min_samples_leaf=3,
  4. min_samples_split=2, min_weight_fraction_leaf=0.0,
  5. presort=False, random_state=None, splitter='best'),
  6. {'criterion': 'gini',
  7. 'max_depth': 10,
  8. 'min_samples_leaf': 3,
  9. 'min_samples_split': 2})

逻辑回归

求解模型为

  1. (0.96666666666666667,
  2. LogisticRegression(C=5, class_weight=None, dual=False, fit_intercept=True,
  3. intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,
  4. penalty='l2', random_state=None, solver='liblinear', tol=0.0001,
  5. verbose=0, warm_start=False),
  6. {'C': 5})

SVM

求解模型为

  1. (0.98666666666666669, SVC(C=0.5, cache_size=200, class_weight=None, coef0=0.0,
  2. decision_function_shape=None, degree=3, gamma='auto', kernel='linear',
  3. max_iter=-1, probability=False, random_state=None, shrinking=True,
  4. tol=0.001, verbose=False), {'C': 0.5, 'kernel': 'linear'})

随机森林

求解模型为

  1. (0.96666666666666667,
  2. RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',
  3. max_depth=None, max_features='auto', max_leaf_nodes=None,
  4. min_samples_leaf=1, min_samples_split=2,
  5. min_weight_fraction_leaf=0.0, n_estimators=120, n_jobs=1,
  6. oob_score=False, random_state=0, verbose=0, warm_start=False),
  7. {'n_estimators': 120})

汇总

可见SVM模型是最优的。

Classifier Mean Score Std
RandomForestClassifier 0.9667 0.0333
LogisticRegression 0.9667 0.0615
KNeighborsClassifier 0.9800 0.0306
SVC 0.9867 0.0267
DecisionTreeClassifier 0.9667 0.0333

分析

混淆矩阵

通过混淆矩阵查看发现出问题主要是第2类和第3类。

实际\预测 setosa versicolor virginica
setosa 16 0 0
versicolor 0 4 1
virginica 0 0 9

代码

GitHub: https://github.com/spiritwiki/codes/blob/master/data_iris

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注