logistic回归与线性回归实际上有不少相同之处,最大的区别就在于他们的因变量不一样,其余的基本都差很少,正是由于如此,这两种回归能够归于同一个家族,即广义线性模型(generalized
linear
model)。这一家族中的模型形式基本上都差很少,不一样的就是因变量不一样,若是是连续的,就是多重线性回归,若是是二项分布,就是logistic回归。logistic回归的因变量能够是二分类的,也能够是多分类的,可是二分类的更为经常使用,也更加容易解释。因此实际中最为经常使用的就是二分类的logistic回归。而逻辑回归是用于分类问题,线性回归才是用于回归问题的。python
接下来就用python的sklearn实现一个例子,这里用到了skearn中的load_iris数据数组
#次日 逻辑回归与线性回归 #导入iris数据 from sklearn.datasets import load_iris #导入回归方法 from sklearn.linear_model import LinearRegression,LogisticRegression #导入拆分数据集的方法 from sklearn.model_selection import train_test_split #用于分析验证测试结果 from sklearn.metrics import confusion_matrix,classification_report # 载入sklearn数据 iris = load_iris() # 获取特征数据 iris_data = iris['data'] # 特征列名 columns = iris['feature_names'] # 获取签值 iris_label = iris['target'] # 拆分训练集和测试集 train_x,test_x,train_y,test_y = train_test_split(iris_data,iris_label,test_size=0.3) clf = LogisticRegression() #训练 clf.fit(train_x,train_y) #预测 predict_y = clf.predict(test_x) print(confusion_matrix(test_y,predict_y)) print(classification_report(test_y,predict_y))
代码很简单,导入数据和训练基本上就是这样,这里说一下confusion_matrix这个主要用于查看预测结果和真是结果的差异dom
[[18 0 0] [ 0 13 1] [ 0 1 12]]
以上结果,列是预测结果数量,行是真是结果数量,在对角线上的数听说明预测和真实结果一直,这里看第二行三列,这里就说明真实结果是类型二结果预测成为类型三。测试
让后就是classification_report这个方法能够看到预测结果的一些信息,好比准确率,召回率等等spa
precision recall f1-score support 0 1.00 1.00 1.00 18 1 0.93 0.93 0.93 14 2 0.92 0.92 0.92 13 avg / total 0.96 0.96 0.96 45
能够看到有三个类型0,1,2code
第一列precision表示准确率,从上往下意思是预测为0类的准确率为1,预测为1类的准确率是0.93,预测为2类的准确率是0.92,最后一行是平均准确率。blog
第二列recall表示召回率ci
第三列f1-score表示F1分数get
第四列support表示改分类有多少样本it
从这个结果来看,总体预测结果较好,平均准确率和召回率还有F1都比较理想,特别是在类型0上是彻底准确,类别2和3相对要差一点。
因为数据特征有3个没法用matplotlib可视化,下面咱们用一个特征的数据实现一下线性回归而且可视化出来。
import numpy as np from matplotlib import pyplot as plt #生成二维的线性散点,加入一些偏移量 x = np.linspace(0, 50, 100) + 2*np.random.randn(100) y = 2*x + 5*np.random.randn(100) #预测须要的x值二维数组,用此方法将数组转换成二维的 x = x.reshape(-1,1) # 上面例子有,一样是拆分训练集和测试集 train_x,test_x,train_y,test_y = train_test_split(x,y,test_size=0.3) # 咱们先画一下训练集和测试集的数据吧 plt.figure(figsize=(16,6)) plt.subplot(1,2,1) plt.scatter(train_x,train_y,label='train data') plt.legend() plt.subplot(1,2,2) plt.scatter(test_x,test_y,label='test data') plt.legend() plt.show()
左边的训练集,右边的是测试集,接下来咱们用训练集开始训练,让后用测试集来测训练的效果,而且打印出来
# 线性回归方法 clf = LinearRegression() # 用训练集训练 clf.fit(train_x,train_y) # 预测测试集 predict_y = clf.predict(test_x) # 打印出来 plt.figure(figsize=(8,6)) plt.xlim([-5,55]) plt.ylim([-10,110]) plt.xlabel('x') plt.ylabel('y') plt.scatter(test_x,test_y,c='r',label='really') plt.plot(test_x,predict_y,color='b',label='predict') plt.legend() plt.show()
红色点是真是测试集数据,蓝线是预测的线性模型。