class Logistic_Regression: def __init__(self, lr_rate = 0.01, max_iter = 100000, tol = 1e-2 ): self.lr_rate = lr_rate self.max_iter = max_iter self.tol = tol self.w = None def preprocessing(self, x): row = x.shape[0] y = np.ones(row).reshape(row, 1) x_prepro = np.hstack((x, y)) return x_prepro def sigmoid(self, x): return 1 / (1 + np.exp(-x)) def fit(self, x_train, y_train): X = self.preprocessing(x_train) y = y_train.T self.w = np.array([[0] * X.shape[1]], dtype = float) k = 0 for loop in range(self.max_iter): z = np.dot(X, self.w.T) grad = X * (y - self.sigmoid(z)) grad = grad.sum(axis = 0) if (np.abs(grad) < self.tol).all(): break else: self.w += self.lr_rate * grad k += 1 print("最终的迭代次数为:".format(k)) print("最终的梯度为:".format(grad)) print("最终的权重为:".format(self.w[0])) return self.w[0] def predict(self, x): p = self.sigmoid(np.dot(self.preprocessing(x), self.w.T )) print("Y = 1的概率被估计为:{}".format(p[0][0])) p[np.where(p > 0.5)] = 1 p[np.where(p < 0.5)] = 0 return p def score(self, x, y): y_c = self.predict(x) error_rate = np.sum(np.abs(y_c - y.T)) / y_c.shape[0] return 1 - error_rate
时间: 2023-05-19 15:03:42 浏览: 118
这是一个逻辑回归的类,包含了预处理、sigmoid函数、拟合、预测和评分等方法。其中,预处理方法将输入的x矩阵增加一列全为1的列,sigmoid函数是逻辑回归中的激活函数,拟合方法使用梯度下降法来更新权重,预测方法将输入的x矩阵预处理后,使用训练好的权重来计算Y=1的概率,并将概率大于0.5的预测为1,小于0.5的预测为0,评分方法计算预测结果与真实结果的误差率。
相关问题
from sklearn.linear_model import SGDClassifier # 建立多分类逻辑斯蒂回归模型 model = SGDClassifier(loss='log_loss', penalty='l2', alpha=0.0001, max_iter=1000, tol=1e-3) # 模型训练 model.fit(X_train, y_train) # 模型评估 y_pred = model.predict(X_test) accuracy = metrics.accuracy_score(y_test, y_pred) print('Accuracy_score of SGD Logistic Regression:', accuracy)这是多分类的逻辑回归?
是的,这个模型使用的是多分类的逻辑斯蒂回归算法。在 scikit-learn 中,`SGDClassifier` 类支持多种分类算法,包括二分类的逻辑斯蒂回归、线性支持向量机 (SVM)、感知器 (Perceptron) 等,以及多分类的逻辑斯蒂回归、多项式朴素贝叶斯 (Multinomial Naive Bayes) 等。在这个示例中,我们使用的是 `SGDClassifier` 类中的逻辑斯蒂回归算法,并将其用于多分类任务。
LogisticRegression(C=1.0,class_weight=None,dual=False,fit_intercept=True, intercept_scaling=1, max_iter=100,multi_class='multinomial' , n_jobs=None,penalty='12, random_state=None,solver='lbfgs ',tol=e.ee01,verbose=0,warm_start=False)
这是 `LogisticRegression` 类的构造函数的参数列表。以下是每个参数的解释:
- `C`:正则化强度的倒数。较小的值表示更强的正则化,默认值为1.0。
- `class_weight`:控制每个类别的权重。可以是字典、字符串 `balanced`(自动平衡权重)或者 `None`(所有类别权重相等)。默认为 `None`。
- `dual`:对偶或原始优化问题。当样本数大于特征数时,通常设置为 `False`。默认为 `False`。
- `fit_intercept`:是否计算截距项。如果设置为 `False`,则模型不会计算截距项。默认为 `True`。
- `intercept_scaling`:截距项的缩放因子。仅在 `fit_intercept=True` 时才生效。默认为1。
- `max_iter`:最大迭代次数。默认为100。
- `multi_class`:多分类问题的策略。可以是字符串 `ovr`(一对多)或 `multinomial`(多项式逻辑回归)。默认为 `multinomial`。
- `n_jobs`:并行运行的作业数。默认为 `None`,表示使用一个作业。
- `penalty`:正则化类型。可以是字符串 `l1`、`l2`、`elasticnet` 或 `none`。默认为 `l2`。
- `random_state`:随机数生成器的种子,用于重复可重复性实验。默认为 `None`。
- `solver`:优化算法。可以是字符串 `newton-cg`、`lbfgs`、`liblinear`、`sag` 或 `saga`。默认为 `lbfgs`。
- `tol`:收敛容忍度。默认为 `1e-4`。
- `verbose`:详细程度。默认为0,不输出信息。
- `warm_start`:是否使用前一次拟合的解作为初始值。默认为 `False`。
你可以根据自己的需求在创建 `LogisticRegression` 模型对象时调整这些参数。请注意,每个参数都有默认值,因此你可以只提供你想要更改的参数。
阅读全文