基于Python实现五大常用分类算法(原理+代码)

读: 在机器学习和统计中,分类算法通过对已知类别训练集的计算和分析,从中发现类别规则并预测新数据的类别。分类被认为是监督学习的一个实例,即学习可以获得正确识别的观察的训练集的情况。

实现分类的算法,特别是在具体实现中,被称为分类器。本文将从实际应用案例出发,总结性介绍几种常用的单模型分类器。原理和代码均在文中,内容较长,建议收藏,后面需要用到时方便查看。

获取更多资源,关注VX公中号:python语言空间

一般应用

分类分析用于提炼应用规则

  • 利用构建算法过程中的分类规则;

  • 以决策树为例:决策树分类节点表示局部最优化的显著特征值,每个节点下的特征变量以及对应的值的组合构成规则。

分类用于提取特征

  • 从大量的输入变量中获得重要性特征,然后提取权重最高的几个特征。

分类用于处理缺失值

  • 缺失值是分类变量,基于模型法填补缺失值;

  • 基于已有其他字段,将缺失字段作为目标变量进行预测。

分类分析算法的选取

  • 文本分类时用到最多的是朴素贝叶斯。

  • 训练集比较小,那么选择高偏差且低方差的分类算法效果逢高,如朴素贝叶斯、支持向量机、这些算法不容易过拟合。

  • 训练集比较大,选取何种方法都不会显著影响准确度。

  • 省时好操作选着用支持向量机,不要使用神经网络。

  • 重视算法准确度,那么选择算法精度高的算法,例如支持向量机、随机森林。

  • 想得到有关预测结果的概率信息,使用逻辑回归。

  • 需要清洗的决策规则,使用决策树。

数据准备

本次分类分析使用股市数据。此处可参考金融数据准备

KNN

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.preprocessingStandardScaler

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):
    
    # 模
  • 11
    点赞
  • 219
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PythonYL学习进阶

朋友,一起学习,请多多支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值