记录一下使用sklearn做逻辑回归的一些代码,避免忘掉
使用到的库主要是matplotlib.pyplot(用来画图),numpy(做一些数组和矩阵运算),sklearn(用来做机器学习的算法库包括了基本全部的机器学习算法呢)
- 加载一些库
import matplotlib.pyplot as plt
import numpy
from sklearn import linear_model
- 数据处理的函数
def loadDataSet(fileName):
"""
对文件进行逐行解析,从而得到第行的类标签和整个特征矩阵
Args:
fileName 文件名
Returns:
dataMat 特征矩阵
labelMat 类标签
"""
dataMat = []
labelMat = []
fr = open(fileName)
for line in fr.readlines():
lineArr = line.strip().split('\t')
dataMat.append([float(lineArr[0]), float(lineArr[1])])
labelMat.append(float(lineArr[2]))
return dataMat, labelMat
- 加载数据,训练算法
dataMat, labelMat = loadDataSet('../dataSets/logistic/TextSet.txt') # 加载数据
reg = linear_model.LinearRegression() # 加载线性逻辑回归模型
reg.fit(dataMat, labelMat) #训练一下模型
- 用matplotlib画图显示一下分类直线
b = reg.intercept_ # 模型训练完之后可以通过intercept_可以得到截距
w1 = reg.coef_[0] # coef记录的是模型中各个特征的权重w的值
w2 = reg.coef_[1]
x = numpy.linspace(-4, 4, 10) # 随机生成-4到4之间的10个数
y = -(b + w1 * x)/w2 #分类直线方程为:w1*x+w2*y+b=0从而计算出y的值
plt.plot(x, y) #画一下(x,y)的直线
- 画出数据的样子
length = len(labelMat)
blackLists = [] # 正分类点集合
redLists = [] #负分类点集合
for i in range(length):
if labelMat[i] == 1:
blackLists.append(dataMat[i])
else:
redLists.append(dataMat[i])
blackLists = numpy.array(blackLists)
redLists = numpy.array(redLists)
plt.scatter(blackLists[:,0], blackLists[:,1], color='black') # 画点
plt.scatter(redLists[:,0], redLists[:,1], color='red') # 画点
- 显示图像
plt.show()
得到如下分类图片