生活随笔
收集整理的這篇文章主要介紹了
Python实现 logistic 回归算法
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Python實現(xiàn) logistic 回歸算法
1、算法介紹
模型描述:
sigmoid函數(shù):
原理: 優(yōu)化目標:最小化 sigmoid(f(x)) 和真實標簽的差別(有不同的 cost function)。運用算法(梯度上升等)更新參數(shù)w、b。
2、Python代碼實現(xiàn)及注釋
決策邊界:
代碼:
import numpy
as np
from matplotlib
import pyplot
as plt
def loadDataset(filename):dataList = []labelsList = []fr = open(filename)
for line
in fr.readlines():lineArr = line.strip().split()dataList.append([
1.0, float(lineArr[
0]), float(lineArr[
1])])labelsList.append(int(lineArr[-
1]))
return dataList, labelsList
def sigmoid(z):return 1.0/(
1+np.exp(-z))
def gradAscent(dataList, labelsList):dataMat = np.mat(dataList)labelsMat = np.mat(labelsList).Tm, n = np.shape(dataMat)learningRate =
0.1maxCycles =
1000weights = np.ones((n,
1))
for i
in range(maxCycles):a = sigmoid(dataMat*weights)error = labelsMat - aweights = weights + learningRate*dataMat.T*error/m
return weights
def stocGradAscent(dataList, labelsList):m, n = np.shape(dataList)maxCycles =
200weights = np.ones(n)
for j
in range(maxCycles):
for i
in range(m):learningRate =
4/(
1.0+j+i)+
0.01a = sigmoid(np.sum(dataList[i]*weights))error = labelsList[i] - aweights = weights + learningRate*error*np.array(dataList[i])
return weights
def plotLine(dataSet, labels, weights):plt.scatter(np.array(dataSet)[:,
1], np.array(dataSet)[:,
2],
30 * (np.array(labels)+
1),
15*np.array(labels))x = np.expand_dims(range(-
3,
3,
1),
1)y = (-weights[
0]-x*weights[
1])/weights[
2]plt.plot(x, y)plt.show()
def predict(sample, weights):sample = np.array([
1.0, sample[
0], sample[
1]])prob = sigmoid(np.sum(sample*weights))
if prob >
0.5:print(
"this is a positive")
else:print(
'this is a negative')
if __name__ ==
'__main__':dataList, labelsList = loadDataset(
'testSet.txt')weights = stocGradAscent(dataList, labelsList)print(weights)plotLine(dataList, labelsList, weights)sample = np.array([
1,
9])predict(sample, weights)
總結
以上是生活随笔為你收集整理的Python实现 logistic 回归算法的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。