赞
踩
读: 在机器学习和统计中,分类算法通过对已知类别训练集的计算和分析,从中发现类别规则并预测新数据的类别。分类被认为是监督学习的一个实例,即学习可以获得正确识别的观察的训练集的情况。
实现分类的算法,特别是在具体实现中,被称为分类器。本文将从实际应用案例出发,总结性介绍几种常用的单模型分类器。原理和代码均在文中,内容较长,建议收藏,后面需要用到时方便查看。
获取更多资源,关注VX公中号:python语言空间
分类分析用于提炼应用规则
利用构建算法过程中的分类规则;
以决策树为例:决策树分类节点表示局部最优化的显著特征值,每个节点下的特征变量以及对应的值的组合构成规则。
分类用于提取特征
从大量的输入变量中获得重要性特征,然后提取权重最高的几个特征。
分类用于处理缺失值
缺失值是分类变量,基于模型法填补缺失值;
基于已有其他字段,将缺失字段作为目标变量进行预测。
文本分类时用到最多的是朴素贝叶斯。
训练集比较小,那么选择高偏差且低方差的分类算法效果逢高,如朴素贝叶斯、支持向量机、这些算法不容易过拟合。
训练集比较大,选取何种方法都不会显著影响准确度。
省时好操作选着用支持向量机,不要使用神经网络。
重视算法准确度,那么选择算法精度高的算法,例如支持向量机、随机森林。
想得到有关预测结果的概率信息,使用逻辑回归。
需要清洗的决策规则,使用决策树。
本次分类分析使用股市数据。此处可参考金融数据准备。
K-Nearest Neighbors (KNN) 是一种懒惰学习算法和分类算法。此外,KNN是机器学习中最简单的方法。利用KNN进行分类,预测新点的分类。
从数据集dataset
中选取需要用的数据作为输入数据和标签。
- X = dataset.loc[ : , ['high','low','close']].values
- y = dataset.loc[ : , ['Up_Down']].values
-
- from sklearn.model_selection import train_test_split
- X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20)
数据标准化
数据标准化对于距离类模型,数据归一化是非常有必要的。这里使用sklearn.preprocessing
中StandardScaler
。
- from sklearn.preprocessing import StandardScaler
- scaler = StandardScaler()
- scaler.fit(X_train)
- X_train = scaler.transform(X_train)
- X_test = scaler.transform(X_test)
- from sklearn.neighbors import KNeighborsClassifier
- knn = KNeighborsClassifier(n_neighbors=5)
- knn.fit(X_train, y_train)
- y_pred = knn.predict(X_test)
- from sklearn.metrics import classification_report, confusion_matrix
- print(confusion_matrix(y_test, y_pred))
- print(classification_report(y_test, y_pred))
- [[39 31]
- [32 44]]
- precision recall f1-score support
- -1 0.55 0.56 0.55 70
- 1 0.59 0.58 0.58 76
- accuracy 0.57 146
- macro avg 0.57 0.57 0.57 146
- weighted avg 0.57 0.57 0.57 146
分类以KNeighbors个数为x轴,模型得分为y轴,绘制学习曲线,以模型得分最高的n_neighbors为本次模型最终参数。
- from sklearn.metrics import accuracy_score
- score = []
- for K in range(40):
- K_value = K+1
- knn = KNeighborsClassifier(n_neighbors = K_value, weights='uniform', algorithm='auto')
- knn.fit(X_train, y_train)
- y_pred = knn.predict(X_test)
- score.append(round(accuracy_score(y_test,y_pred)*100,2))
-
- plt.figure(figsize=(12, 6))
- plt.plot(range(1, 41), score, color='red', linestyle='dashed', marker='o',
- markerfacecolor='blue', markersize=10)
- plt.title('The Learning curve')
- plt.xlabel('K Value')
- plt.ylabel('Score')
带误差线的学习曲线
- from sklearn import metrics
- Ks = 10
- mean_acc = np.zeros((Ks-1))
- std_acc = np.zeros((Ks-1))
- ConfustionMx = [];
- for n in range(1,Ks):
-
- # 模
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。