python数据挖掘项目实战 预测_《Python数据挖掘与机器学习实战》—3.7.4 数据预测...

该博客介绍了使用Python进行数据挖掘的逻辑回归预测项目。通过加载数据集、定义sigmoid函数、随机梯度上升法优化权重,并绘制分类结果图,展示了如何进行数据预测和拟合曲线。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

3.7.4  数据预测

对数据进行预测,代码如下:

from numpy import *

import pandas as pd

from pandas import DataFrame

filename='/Users/apple27/Documents/data.txt'                             #文件目录

#df = DataFrame(pd.read_csv('/Users/apple27/Documents/logi.csv'))

def loadDataSet():                                                   #读取数据(这里只有两个特征)

df=pd.read_csv(filename)

print(df)

dataMat = []

labelMat = []

fr = open(filename)

for line in fr.readlines():

lineArr = line.strip().split()

dataMat.append([1.0, float(lineArr[0]), float(lineArr[1])])

#前面的1表示方程的常量。比如两个特征X1和X2,共需要3个参数

#W1+W2*X1+W3*X2

labelMat.append(int(lineArr[2]))

return dataMat,labelMat

#调用函数

loadDataSet()

def sigmoid(inX):                                                         #定义sigmoid函数

return 1.0/(1+exp(-inX))

def stocGradAscent1(dataMat, labelMat):

#改进版随机梯度上升,在每次迭代中随机选择样本来更新权重

#并且随迭代次数增加,权重变化越小

dataMatrix=mat(dataMat)

classLabels=labelMat

m,n=shape(dataMatrix)

weights=ones((n,1))

maxCycles=500

for j in range(maxCycles):                                #迭代

dataIndex=[i for i in range(m)]

for i in range(m):                                      #随机遍历每一行

alpha=4/(1+j+i)+0.0001                         #随迭代次数增加,权重变化越小

randIndex=int(random.uniform(0,len(dataIndex)))  #随机抽样

h=sigmoid(sum(dataMatrix[randIndex]*weights))

error=classLabels[randIndex]-h

weights=weights+alpha*error*dataMatrix[randIndex].transpose()

del(dataIndex[randIndex])                 #去除已经抽取的样本

return weights

#画出最终分类的图

def plotBestFit(weights):

import matplotlib.pyplot as plt

dataMat,labelMat=loadDataSet()

dataArr = array(dataMat)

n = shape(dataArr)[0]

xcord1 = []; ycord1 = []

xcord2 = []; ycord2 = []

for i in range(n):

if int(labelMat[i])== 1:

xcord1.append(dataArr[i,1])

ycord1.append(dataArr[i,2])

else:

xcord2.append(dataArr[i,1])

ycord2.append(dataArr[i,2])

fig = plt.figure()

ax = fig.add_subplot(111)

#定义颜色线条

ax.scatter(xcord1, ycord1, s=30, c='red', marker='s')

ax.scatter(xcord2, ycord2, s=30, c='green')

#坐标轴

x = arange(-3.0, 3.0, 0.1)

y = (-weights[0]-weights[1]*x)/weights[2]

ax.plot(x, y)

#绘图

plt.xlabel('X1')

plt.ylabel('X2')

plt.show()

plt.savefig('images/logExample.png', format='png')

def main():  #主函数

datamat,labelmat=loadDataSet()

weights=stocGradAscent1(datamat, labelmat).getA()

plotBestFit(weights)

if __name__=='__main__':

main()

逻辑回归分析结果如图3-12所示,蓝色线为拟合曲线。

f39008c9fe8ace03bebd5a58b4fcc70f.png

图3-12  逻辑回归实验结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值