美文网首页
sklearn-监督学习-分类与回归

sklearn-监督学习-分类与回归

作者: Jana_LU | 来源:发表于2019-10-10 08:27 被阅读0次

一、分类模型
1.KNN算法
函数:KNeighborsClassifier()
思路:对k个最近的邻居进行拟合,调试出最佳n_neighbors的值,分别对训练集、验证集、测试集的标记值与预测值进行拟合,用参数accuracy_score \recall_score \f1_score 对拟合效果进行评定。

from sklearn.metrics import accuracy_score,recall_score,f1_score
from sklearn.neighbors import NearestNeighbors,KNeighborsClassifier
knn_clf = KNeighborsClassifier(n_neighbors=3)
knn_clf.fit(X_train,Y_train)
from sklearn.metrics import accuracy_score,recall_score,f1_score
print('Train')
Y_pred = knn_clf.predict(X_train)
print('ACC',accuracy_score(Y_train,Y_pred))
print('REC',recall_score(Y_train,Y_pred))
print('F-Score',f1_score(Y_train,Y_pred))
Y_pred = knn_clf.predict(X_validation)
print('Validation')
print('ACC',accuracy_score(Y_validation,Y_pred)) #准确率
print('REC',recall_score(Y_validation,Y_pred)) #召回率
print('F-Score',f1_score(Y_validation,Y_pred)) #F值
Y_pred = knn_clf.predict(X_test)
print('Test')
print('ACC',accuracy_score(Y_test,Y_pred))
print('REC',recall_score(Y_test,Y_pred))
print('F-Score',f1_score(Y_test,Y_pred))

2.朴素贝叶斯算法
函数:GaussianNB(), BernoulliNB()
思路:将上述代码进行优化,建立models的list,将模型以元组形式存入list,用classifier name 和 classifier循环遍历models,分类拟合得到分类数组和标签,然后建立训练集、验证集、测试集及其对应标记值的list;循环遍历每个xy_lst的元素,遍历过程中将数组与标签分开,并进行预测。最后通过评定参数accuracy_score、recall_score、f1_score,print预测值与标记值的准确率

from sklearn.metrics import accuracy_score,recall_score,f1_score
from sklearn.naive_bayes import GaussianNB,BernoulliNB
#用贝叶斯方法时,数据为离散值的情况下可能表现会更好一些
#高斯朴素贝叶斯(假设特征是高斯分布的),伯努利朴素贝叶斯(值是离散值用这个方法,如果是连续值要用伯努利进行二值化)
models = []
models.append(('GaussianNB',GaussianNB()))
models.append(('BernoulliNB',BernoulliNB()))

for clf_name,clf in models:
    clf.fit(X_train,Y_train)
    xy_lst = [(X_train,Y_train),(X_validation,Y_validation),(X_test,Y_test)]
    for i in range(len(xy_lst)):
        X_part = xy_lst[i][0]
        Y_part = xy_lst[i][1]
        Y_pred = clf.predict(X_part)
print(i)
print(clf_name,'--ACC',accuracy_score(Y_part,Y_pred))
print(clf_name,'--REC',recall_score(Y_part,Y_pred))
print(clf_name,'--F_score',f1_score(Y_part,Y_pred))

3.决策树
函数:DecisionTreeClassifier()
思路:决策树模型有两种方法,一个是用Gini系数,另一个是用entropy信息熵

from sklearn.tree import DecisionTreeClassifier,export_graphviz
from sklearn.externals.six import StringIO
models = []
models.append(('DecisionTreeGini',DecisionTreeClassifier(min_impurity_split=0.1)))  # min_impurity_split=0.1 最小不纯度,一种减枝方法
models.append(('DecisionTreeEntropy',DecisionTreeClassifier(criterion='entropy')))  # 信息增益方法的决策树
for clf_name,clf in models:
    clf.fit(X_train,Y_train)
    xy_lst = [(X_train,Y_train),(X_validation,Y_validation),(X_test,Y_test)]
    for i in range(len(xy_lst)):
        X_part = xy_lst[i][0]
        Y_part = xy_lst[i][1]
        Y_pred = clf.predict(X_part)
        print(i)
        print(clf_name,'--ACC',accuracy_score(Y_part,Y_pred))
        print(clf_name,'--REC',recall_score(Y_part,Y_pred))
        print(clf_name,'--F_score',f1_score(Y_part,Y_pred))
        dot_data = StringIO() #使用StringIO
        export_graphviz(clf,out_file=dot_data,
                            feature_names=f_names,
                            class_names=['NL','L'],
                            filled=True,
                            rounded=True,
                            special_characters=True)
        graph = pydotplus.graph_from_dot_data(dot_data.getvalue())
        graph.write_pdf('dt_tree2.pdf')
tree

4.支持向量机SVM算法
函数:SVC()
思路:先映射,再在低维空间计算,再用核函数扩维

from sklearn.svm import SVC
models.append(('SVM Classifier',SVC(C=1000))) #通过C可以控制计算的准确性

5.集成方法(ensemble)一随机森林算法(Bagging)
函数:RandomForestClassifier()
思想:每个决策树可以并不使用全部特征,不需要剪值,即可有效避免过拟合。通过对训练数据集进行随机采样,以重新组合成不同的数据集,利用弱学习算法对不同的新数据集进行学习,得到一系列的预测结果,对这些预测结果做平均或者投票做出最终的预测。

from sklearn.ensemble import RandomForestClassifier
models.append(('OriginalForest',RandomForestClassifier()))  #默认n_estimators=10, 特征自动选取
models.append(('RandomForest',RandomForestClassifier(max_features=None)))  #取全部特征

6.集成方法(ensemble)一Adaboost 算法(Boosting)
函数:AdaBoostClassifier()
思想:通过对样本进行不同的赋值,对错误学习的样本的权重设置的较大,这样在后续的学习中集中处理难学的样本,最终得到一系列的预测结果,每个预测结果有一个权重,较大的权重表示该预测效果较好。

from sklearn.ensemble import AdaBoostClassifier
# n_estimators 弱学习的分类器的数量,默认50;base_estimator 默认为决策树
models.append(('AdaBoost',AdaBoostClassifier(base_estimator=SVC(),n_estimators=100,algorithm='SAMME')))

二、回归模型
1.线性回归: LinearDiscriminantAnalysis()
2.岭回归: Ridge()
3.Lasso回归: Lasso()

from sklearn.linear_model import LinearRegression,Ridge,Lasso
regr = LinearRegression()
regr = Ridge(alpha=0.8)  #用岭回归可以得到控制参数规模的作用,但作用不是很明显
regr = Lasso(alpha=0.002) #通过控制参数的规模而达到一个更好的拟合效果
regr.fit(features.values,label.values)
Y_pred = regr.predict(features.values)
print('coef',regr.coef_)  #看下拟合过后的参数
from sklearn.metrics import mean_squared_error #平均平方误差
print('MSE',mean_squared_error(Y_pred,label.values))

4.逻辑回归: LogisticRegression()
主要用于线性可分的数据集

from sklearn.linear_model import LogisticRegression
models.append(('LogisticRegression',LogisticRegression(C=1000,tol=1e-10,solver="sag",max_iter=10000)))
# 如果效果不好,可以通过调参来优化;

5.人工神经网络: 用Keras进行实现
主要用于非线性数据,主要应用于图像识别,语音识别,自然语言处理等

from keras.models import Sequential # Sequential 人工神经网络的容器,而这个容器是序列化(层级化)的

from keras.layers.core import Dense,Activation # Dense 稠密层(神经网络层),Activation激活函数

from keras.optimizers import SGD # SGD是随机梯度下降算法

mdl = Sequential()

mdl.add(Dense(50,input_dim=len(f_v[0]))) # 先建一个稠密层表示输入层,在输入每一层的时候只需要表示输出就可以了,\

#只有在输入层的时候需要表示输入,输出代表下一个隐含神经元的个数,\

#先指定下一个隐含神经元的个数,eg:50;输入维度与输入数据维度保持一致

mdl.add(Activation('sigmoid'))

mdl.add(Dense(2)) # 输出维度设定

mdl.add(Activation('softmax'))

sgd = SGD(lr=0.05) #lr指的是学习率,也就是梯度下降里的α,学习率越大意味着很可能拟合不到最优点,所以lr不能取太大

mdl.compile(loss="mean_squared_error",optimizer="adam") # 编译过程(建立模型的过程),loss指的是最优化函数(损失函数)\

# 每个输出对应的输出值和要拟合的标注值,进行平方求和再开方得到的值,让它最小,就是loss的含义; \

# optimizer 表示用什么样的优化器去优化

mdl.fit(X_train,np.array([[0,1] if i == 1 else [1,0] for i in Y_train]),nb_epoch=20000,batch_size=8999)

# nb_epoch 表示迭代的次数,合理取值; batch_size 随机梯度算法每次选取的数量,由于本样本数据量不是很大,所以取全部训练集

# 结果不理想,可以调整迭代次数nb_epoch 或 增加样本数量batch_size;也可以调整学习率lr,比如从0.01调整到0.05;\

# 也可以通过更改优化器optimizer比如将sgd改为adam

xy_lst = [(X_train,Y_train),(X_validation,Y_validation),(X_test,Y_test)]

for i in range(len(xy_lst)):

    X_part = xy_lst[i][0]

    Y_part = xy_lst[i][1]

    Y_pred = mdl.predict_classes(X_part) #输出分类标注

    print(i)

    print("NN",'--ACC',accuracy_score(Y_part,Y_pred))

    print("NN",'--REC',recall_score(Y_part,Y_pred))

    print("NN",'--F_score',f1_score(Y_part,Y_pred))

return

6.GBDT,回归树和提升树: GradientBoostingClassifier()

from sklearn.ensemble import GradientBoostingClassifier
models.append(('GBDT',GradientBoostingClassifier(max_depth=6,n_estimators=100))) # max_depth 只是一个经验值
# 参数learn_rate 第二个分类器已经进行了衰减进行10%的衰减;criterion:mse

相关文章

  • sklearn-监督学习-分类与回归

    一、分类模型1.KNN算法函数:KNeighborsClassifier()思路:对k个最近的邻居进行拟合,调试出...

  • Types of Machine Learning: Super

    1. 监督学习 or 无监督学习 2. 监督学习 2.1 分类 2.2 回归 2.3 监督学习:分类 & 回归...

  • (一)监督学习与无监督学习

    监督学习(Supervised Learning): 分类:1、回归 2、分类 例子: 回归————————...

  • 深度学习的一些基本概念(一)

    申明:非原创,转载自《有监督学习、无监督学习、分类、聚类、回归等概念》 有监督学习、无监督学习、分类、聚类、回归等...

  • 机器学习的类型

    二元分类、多元分类、回归、结构化学习、······ 监督学习、非监督学习、半监督学习、强化学习、······ 成批...

  • 机器学习的分类

    分类: 目前机器学习主流分为:监督学习,无监督学习,强化学习。 监督学习: 监督学习可分为“回归”和“分类”问题。...

  • 机器学习算法分类

    机器学习算法分类 监督学习(预测)分类:K-近邻算法、贝叶斯分类、决策树与随机森林、逻辑回归、神经网络回归:线性回...

  • 机器学习

    监督学习: 分类与回归 线性回归: 线性模型:最小二乘法,岭回归,lasso回归 解决线性问题...

  • 《机器学习》1.基础知识

    机器学习 组成 主要任务 分类:将数据划分类别。回归:主要用于预测。分类和回归属于监督学习。无监督学习:聚类,密度...

  • 机器学习方式分类以及计算机视觉任务分类(研究方向)

    按学习方式分类 监督学习(Supervised Learning)常用于分类问题和回归问题 无监督学习(Unsup...

网友评论

      本文标题:sklearn-监督学习-分类与回归

      本文链接:https://www.haomeiwen.com/subject/itcwectx.html