当前位置:   article > 正文

0_(机器学习)逻辑回归介绍

0_(机器学习)逻辑回归介绍

模型简介

逻辑回归(logistic回归)即对数几率回归,它虽然被称作“回归”,但却是一种用于二分类的分类方法。逻辑回归是通过分析一个样本被分为各个类的概率比较后得出该样本最有可能属于的类的一种分类方法。

逻辑回归公式推导

 

 

 训练、测试过程简述

 

代码实现 

  1. from sklearn.datasets import load_breast_cancer
  2. from sklearn.model_selection import train_test_split
  3. import math
  4. import numpy as np
  5. '''定义sigmoid函数'''
  6. def sigmoid(x):
  7. if x>0:
  8. return 1.0/(1.0+np.exp(-x))
  9. else:
  10. return np.exp(x)/(1.0+np.exp(x))
  11. class LogisticRegression:
  12. def __init__(self,learning_rate=0.01,num_iterations=1000):
  13. self.learning_rate=learning_rate
  14. self.num_iterations=num_iterations
  15. self.weights=None
  16. self.bias=None
  17. def fit(self,X,y,weights,bias=0):
  18. #num_samples是样本的数量,num_features是样本特征的数量
  19. num_samples,num_features=X.shape
  20. self.weights=weights
  21. self.bias=bias
  22. for _ in range(self.num_iterations):
  23. y_pred=[]
  24. for x in X:
  25. dot=np.dot(x, self.weights)
  26. linear_model = dot + self.bias
  27. y_pred.append(sigmoid(linear_model))
  28. y_pred=np.array(y_pred)
  29. dw = (1 / num_samples) * np.dot(X.T, (y_pred - y))
  30. db = (1 / num_samples) * np.sum(y_pred - y)
  31. self.weights -= self.learning_rate * dw
  32. self.bias -= self.learning_rate * db
  33. def predict_prob(self, X):
  34. y_pred = []
  35. for x in X:
  36. dot = np.dot(x, self.weights)
  37. linear_model = dot + self.bias
  38. y_pred.append(sigmoid(linear_model))
  39. y_pred = np.array(y_pred)
  40. return y_pred
  41. def predict(self, X, threshold=0.5):
  42. y_pred_prob = self.predict_prob(X)
  43. y_pred = np.zeros_like(y_pred_prob)
  44. y_pred[y_pred_prob >= threshold] = 1
  45. return y_pred
  46. def calculate_accuracy(self,y_pred,y_test):
  47. sum=0
  48. for p,t in zip(y_pred,y_test):
  49. if p==t:
  50. sum+=1
  51. return float(sum)/float(len(y_pred))
  52. if __name__ == "__main__":
  53. l=LogisticRegression()
  54. breast_cancer = load_breast_cancer()
  55. X = breast_cancer.data
  56. y = breast_cancer.target
  57. X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1)
  58. num_samples, num_features = X.shape
  59. #w = np.ones(num_features)
  60. w = np.zeros(num_features)
  61. l.fit(X_train,y_train,w)
  62. y_pred=l.predict(X_test)
  63. print(y_pred)
  64. print(y_test)
  65. print("准确率:",l.calculate_accuracy(y_pred,y_test))

 

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

闽ICP备14008679号