記錄一下使用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()
得到如下分類圖片
image.png