废话少说速度上号刷题卷起来
描述:
其中dataSet.csv的示例数据集如下所示:
实现代码:
# -*- coding: UTF-8 -*-
from math import log
import pandas as pd
dataSet = pd.read_csv('dataSet.csv', header=None)
def calcInfoEnt(dataSet):
# 数据集的样本数量 D
numEntres = len(dataSet)
#code start here
# 样本类别分组
label = dataSet.iloc[:,-1].value_counts()
infoEnt = 0.0
for i in label.index:
# Pi
Pi = label[i]/numEntres
# H(D)
infoEnt = infoEnt - Pi * log(Pi, 2)
return infoEnt
#code end here
#返回值 infoEnt 为数据集的信息熵,表示为 float 类型
if __name__ == '__main__':
print(calcInfoEnt(dataSet))
#输出为当前数据集的信息熵
运行结果:
描述:
实现代码:
import numpy as np
import pandas as pd
def generate_data():
datasets = pd.read_csv('dataSet.csv', header=None).values.tolist()
labels = pd.read_csv('labels.csv', header=None).values.tolist()
return datasets, labels
def sigmoid(X):
#补全 sigmoid 函数功能
#code start here
s = 1/(1+np.exp(-X))
return s
#code end here
def gradientDescent(dataMatIn, classLabels):
alpha = 0.001 # 学习率,也就是题目描述中的 α
iteration_nums = 100 # 迭代次数,也就是for循环的次数
dataMatrix = np.mat(dataMatIn)
labelMat = np.mat(classLabels).transpose()
m, n = np.shape(dataMatrix) # 返回dataMatrix的大小。m为行数,n为列数。
weight_mat = np.ones((n, 1)) #初始化权重矩阵
#iteration_nums 即为循环的迭代次数
#请在代码完善部分注意矩阵乘法的维度,使用梯度下降矢量化公式
#code start here
for i in range(iteration_nums):
error = sigmoid(dataMatrix*weight_mat)-labelMat
weight_mat=weight_mat-alpha*dataMatrix.transpose()*error
return weight_mat
#code end here
if __name__ == '__main__':
dataMat, labelMat = generate_data()
print(gradientDescent(dataMat, labelMat))
《100天精通Python从入门到就业》:本专栏专门针对零基础和需要进阶提升的同学所准备的一套完整教学,从0到100的不断进阶深入,后续还有实战项目,轻松应对面试,专栏订阅地址:https://blog.csdn.net/yuan2019035055/category_11466020.html