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

基于Python实现五⼤常⽤分类算法(原理+代码)
读: 在机器学习和统计中,分类算法通过对已知类别训练集的计算和分析,从中发现类别规则并预测数据的类别。分类被认为是监督学习的⼀个实例,即学习可以获得正确识别的观察的训练集的情况。
实现分类的算法,特别是在具体实现中,被称为分类器。本⽂将从实际应⽤案例出发,总结性介绍⼏种常⽤的单模型分类器。原理和代码均在⽂中,内容较长,建议收藏,后⾯需要⽤到时⽅便查看。
获取更多资源,关注VX公中号:python语⾔空间
⼀般应⽤
分类分析⽤于提炼应⽤规则
利⽤构建算法过程中的分类规则;
以决策树为例:决策树分类节点表⽰局部最优化的显著特征值,每个节点下的特征变量以及对应的值的组合构成规则。
酸雨采样器
分类⽤于提取特征
mum1从⼤量的输⼊变量中获得重要性特征,然后提取权重最⾼的⼏个特征。
分类⽤于处理缺失值
缺失值是分类变量,基于模型法填补缺失值;
基于已有其他字段,将缺失字段作为⽬标变量进⾏预测。
分类分析算法的选取
⽂本分类时⽤到最多的是朴素贝叶斯。
训练集⽐较⼩,那么选择⾼偏差且低⽅差的分类算法效果逢⾼,如朴素贝叶斯、⽀持向量机、这些算法不容易过拟合。
训练集⽐较⼤,选取何种⽅法都不会显著影响准确度。
省时好操作选着⽤⽀持向量机,不要使⽤神经⽹络。
重视算法准确度,那么选择算法精度⾼的算法,例如⽀持向量机、随机森林。想得到有关预测结果的概率信息,使⽤逻辑回归。
需要清洗的决策规则,使⽤决策树。
数据准备
本次分类分析使⽤股市数据。此处可参考。
KNN
是⼀种懒惰学习算法和分类算法。此外,KNN是机器学习中最简单的⽅法。利⽤KNN进⾏分类,预测新点的分类。
数据预处理
从数据集dataset 中选取需要⽤的数据作为输⼊数据和标签。
数据标准化
对于距离类模型,数据归⼀化是⾮常有必要的。这⾥使⽤sklearn.preprocessing 中StandardScaler 。
模型训练与预测
模型评价
1
X = dataset.loc[ : , ['high','low','close']].values 2
y = dataset.loc[ : , ['Up_Down']].values 3
del_selection import train_test_split  5X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20)
1
from sklearn.preprocessing import StandardScaler  2
scaler = StandardScaler()  3
scaler.fit(X_train)4X_train = ansform(X_train)  5X_test = ansform(X_test)
1
ighbors import KNeighborsClassifier  2
knn = KNeighborsClassifier(n_neighbors=5)  3knn.fit(X_train, y_train) 4y_pred = knn.predict(X_test)
ics import classification_report, confusion_matrix
2print(confusion_matrix(y_test, y_pred))
3print(classification_report(y_test, y_pred))
1[[39 31]
2 [32 44]]
3              precision  recall  f1-score  support
4          -1      0.5
5    0.5
6      0.55        70
5              1      0.59    0.58      0.58        76
6    accuracy                        0.5
7      146
7  macro avg      0.57    0.57      0.57      146
8weighted avg      0.57    0.57      0.57      146
绘制学习曲线
分类以KNeighbors个数为x轴,模型得分为y轴,绘制学习曲线,以模型得分最⾼的n_neighbors为本次模型最终参数。
ics import accuracy_score
2score = []
3for K in range(40):
4    K_value = K+1
5    knn = KNeighborsClassifier(n_neighbors = K_value, weights='uniform', algorithm='auto')
6    knn.fit(X_train, y_train)
7    y_pred = knn.predict(X_test)
8    score.append(round(accuracy_score(y_test,y_pred)*100,2))
9
10plt.figure(figsize=(12, 6))
11plt.plot(range(1, 41), score, color='red', linestyle='dashed', marker='o',
12        markerfacecolor='blue', markersize=10)
13plt.title('The Learning curve')
14plt.xlabel('K Value')
15plt.ylabel('Score')
带误差线的学习曲线
1from sklearn import metrics
2Ks = 10
3mean_acc = np.zeros((Ks-1))
4std_acc = np.zeros((Ks-1))
5ConfustionMx = [];
6for n in range(1,Ks):
7
8    # 模型训练和预测
9    neigh = KNeighborsClassifier(n_neighbors = n).fit(X_train,y_train)
10    yhat=neigh.predict(X_test)
11    mean_acc[n-1] = metrics.accuracy_score(y_test, yhat)
12    std_acc[n-1]=np.std(yhat==y_test)/np.sqrt(yhat.shape[0])
13
14# 绘图
15plt.figure(figsize=(12,6))
16plt.plot(range(1,Ks),mean_acc,'g')
17plt.fill_between(range(1,Ks),mean_acc - 1 * std_acc,mean_acc + 1 * std_acc, alpha=0.10) 18plt.legend(('Accuracy ', '+/- 3xstd'))
19plt.ylabel('Accuracy ')
20plt.xlabel('Number of Nabors (K)')
21plt.tight_layout()
22plt.show()
23# print( "The best accuracy was with",
24          mean_acc.max(), "with k=",
25          mean_acc.argmax()+1)爬墙式
误差率可视化
1error = []
2
3# 计算K值在1-40之间多误差值shenh
4for i in range(1, 40):
5    knn = KNeighborsClassifier(n_neighbors=i)
6    knn.fit(X_train, y_train)
7    pred_i = knn.predict(X_test)
8    error.an(pred_i != y_test))
9plt.figure(figsize=(12, 6))
10plt.plot(range(1, 40), error, color='red', linestyle='dashed', marker='o',
11        markerfacecolor='blue', markersize=10)
12plt.title('Error Rate K Value')
13plt.xlabel('K Value')
14plt.ylabel('Mean Error')
逻辑回归
是线性分类起,其本质是由线性回归通过⼀定的数学变化⽽来的。要理解逻辑回归,得先理解线性回归。线性回归是构造⼀个预测函数来映射输⼊的特性矩阵和标签的线性关系。线性回归使⽤最佳的拟合直线(也就是回归线)在因变量()和⼀个或多个⾃变量()之间建⽴⼀种关系。在这种技术中,因变量是连续的,⾃变量可以是连续的也可以是离散的,回归线的性质是线性的。编织软管
类⽐线性⽅程 :
可以⽤矩阵的形式表⽰该⽅程,其中 x 与 w 均可以被看作⼀个列矩阵:
通过函数 ,线性回归使⽤输⼊的特征矩阵  来输出⼀组连续型的标签值 y_pred,以完成各种预测连续型变量的任务。若标签是离散型变量,尤其是满⾜0-1分布的离散型变量,则可以通过引⼊联系函数(link function),将线性回归⽅程  变换为 ,并且令  的值分布在 (0,1) 之间,且当  接近0时样本的标签为类别0,当  接近1时样本的标签为类别1,这样就得到了⼀个分类模型。⽽这个联系函数对于逻辑回归来说,就是Sigmoid函数
线性回归中  带⼊到Sigmoid函数中,即得到⼆元逻辑回归模型的⼀半形式:
其中  为逻辑回归的返回的标签值。假设已经训练好⼀组权值向量 。只要把我们需要预测的特征矩阵  带⼊到 ⽅差中,得到输出值就是标签为类别1的概率,于是就能判断输⼊特征矩阵是属于哪个类别。
yig滤波器因此逻辑回归是不直接预测标签值,⽽是去预测标签为类别1的概率。⼀般地如果标签为类别1的概率⼤于0.5,就认为其为类别1,否在为类别2。
数据准备
定义x、y,数据标准化、划分训练集和测试集。
1dataset['Buy_Sell'] = dataset['Buy_Sell'].astype('int')
2X = np.asarray(dataset[['open', 'high', 'low', 'close', 'volume']])
3y = np.asarray(dataset['Buy_Sell'])
4from sklearn import preprocessing
5X = preprocessing.StandardScaler().fit(X).transform(X)
del_selection import train_test_split
7X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)
模型实例化

本文发布于:2024-09-23 14:25:38,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/97575.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:分类   算法   预测   模型   数据   类别   回归   标签
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议