版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_44474718/article/details/86696828
逻辑回归:与它的名字相反,实际上他是用于目标分类的模型。
它使用一个逻辑函数或者(sigmoid函数)把任意输入的实值x转换为值区间在0到1之间的一个预测值y。将y向最近的整数取整可以高效的把输入分类到属于0或者1的类别。
import numpy as np
import cv2
from sklearn import datasets
from sklearn import model_selection
from sklearn import metrics
import matplotlib.pyplot as plt
plt.style.use('ggplot')
iris=datasets.load_iris() # 载入训练数据集
"""
print (dir(iris)) #字典结构
print (iris.data.shape) #数据大小和特征
print (iris.feature_names) #特征
print (iris.target.shape)
print (np.unique(iris.target)) #标签
"""
# 简化二分类问题 因为仅关注二分类问题,忽略不需要的标签
idx=iris.target !=2 # 得到标签为0和1的数据
data=iris.data[idx].astype(np.float32)
target=iris.target[idx].astype(np.float32)
# 检查数据
plt.scatter(data[:,0],data[:,1],c=target,cmap=plt.cm.Paired,s=180)
plt.xlabel(iris.feature_names[0])
plt.ylabel(iris.feature_names[1])
plt.show()
# 把数据分为训练集和测试集
X_train,X_test,Y_train,Y_test=model_selection.train_test_split(data,target,test_size=0.1,random_state=42) #42 表示随机状态
# 训练分类器
lr=cv2.ml.LogisticRegression_create() # 创建分类器
lr.setTrainMethod(cv2.ml.LogisticRegression_MINI_BATCH) # 指定训练方法
lr.setMiniBatchSize(1) # 使用每个数据的之后都更新一次模型
lr.setIterations(100) # 算法结束之前的迭代次数
lr.train(X_train,cv2.ml.ROW_SAMPLE,Y_train) # 调用对象的训练方法
lr.get_learnt_thetas() # 检索得到的权重 x=w0f0+w1f1+w2f2+w3f3+w4f4+w4 四个特征f,偏差w4
# print(lr.get_learnt_thetas())
# 测试分类器
ret1, y_pred = lr.predict (X_train)
print (metrics.accuracy_score(Y_train,y_pred)) # 训练数据集上的准确度
ret2, Y_pred= lr.predict(X_test)
print (metrics.accuracy_score(Y_test,Y_pred)) # 测试集上的准确度