当前位置:   article > 正文

24/8/14算法笔记 复习_OVR和softmax

24/8/14算法笔记 复习_OVR和softmax
  1. import numpy as np
  2. from sklearn.linear_model import LogisticRegression
  3. from sklearn import datasets
  4. from sklearn.model_selection import train_test_split
  5. X,y = datasets.load_iris(return_X_y = True)
  6. X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2,random_state = 1024)#随机数种子
  7. #ovr建模
  8. from sklearn.metrics import accuracy_score
  9. model = LogisticRegression(multi_class = 'ovr')
  10. model.fit(X_train,y_train)
  11. y_pred = model.predict(X_test)
  12. print('逻辑回归实现方式准确率',model.score(X_test,y_test))
  13. accuracy_score(y_test,y_pred)#计算模型正确预测的样本数占总样本数的比例。
  14. (y_pred == y_test).mean() #这部分代码会逐元素比较 y_pred 和 y_test 数组(或 Series)。如果 y_pred 中的元素与 y_test 中的对应元素相等,则结果为 True(在布尔上下文中相当于 1),否则为 False(相当于 0)。
  15. #进行概率预测
  16. np.set_printoptions(suppress=True)#不用科学计数
  17. proba_ = model.predict_proba(X_test)
  18. #几列,几维
  19. proba_[:10]
  20. #概率的手动计算
  21. #OVR依然是sigmoid
  22. def sigmoid(z):
  23. return 1/(1+np.exp(-z))
  24. b_ = model.intercept_#截距
  25. w_ = model.coef_ #方程系数,三行表示三个分类器,四列表示每个方程,4个系数(4个属性,索引对应4个系数)
  26. y_self_pred = X_test.dot(w_.T)+b_
  27. p = sigmoid(y_self_pred)
  28. p = p/p.sum(axis = 1).reshape(-1,1)#归一化,和就是1
  29. print('手动计算的概率:\n',p[:5])
  30. print('算法计算的概率:\n',proba_[:5])
  31. #softmax
  32. def softmax(x):
  33. return np.exp(x)/np.exp(z).sum()
  34. z = [3,1,-3]
  35. softmax(z).round(2)
  36. X,y = datasets.load_iris(return_X_y=True)
  37. X_train,X_test,y_train,y_test = train_test_split(X,y,random_state = 1024)
  38. #模型选择
  39. model = LogisticRegression(multi_class='multinomial')#多分类,表示softmax进行概率划分
  40. model.fit(X_train,y_train)
  41. print('算法预测的概率:',model.score(X_test,y_test))
  42. print('算法预测测试数据的概率:\n',model.predict_proba(X_test)[:5])
  43. #概率手动计算
  44. w_ = model.coef_
  45. b_ = model.intercept_
  46. def softmax(z):
  47. return np.exp(z)/np.exp(z).sum(axis = 1).reshape(-1,1)
  48. z = X_test.dot(w_.T)+b_
  49. softmax(z)[:5]

OvR(One vs Rest)算法是一种解决多分类问题的方法,它将多分类问题转化为多个二分类问题。具体来说,如果有N个类别,OvR算法会为每个类别训练一个二分类器,将该类别作为正例,其余所有类别作为负例。在预测时,所有二分类器都会对测试样本进行预测,然后选择预测为正例的概率最高的类别作为最终预测结果。如果多个分类器预测为正类,则选择置信度最大的类别作为最终分类结果。这种方法的优点是实现简单,计算量相对较小,但是可能会在类别不平衡的情况下导致性能下降

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/一键难忘520/article/detail/996942
推荐阅读
相关标签
  

闽ICP备14008679号