前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >机器学习之逻辑回归

机器学习之逻辑回归

作者头像
Wu_Candy
发布于 2022-07-04 07:09:45
发布于 2022-07-04 07:09:45
3630
举报
文章被收录于专栏:无量测试之道无量测试之道

第一步:定义问题

我们首先需要解决的是我们将面临一个什么问题,需要我们做什么,俗话说的磨刀不误砍柴工,首先看清对手是谁才能有的放矢。

今天我们要处理的问题是:给训练好的模型输入一张图片,模型返回这张图片是属于什么类型

第二步:收集数据

根据确定的数据分析对象,抽象出在数据分析中所需要的特征信息

今天这个示例的数据来源于网络,大家可以自行下载一些图片即可,本次示例中给出两组图片数据进行演示

第三步:准备数据

这一步将对数据进行清洗、整理,处理空值等一系列操作

from PIL import Image,ImageOps

import glob, os

src_source = 'E:\\All\\AllInHere\\AiProject\\photo\\' #原图片存放路径

src_target = 'E:\\All\\AllInHere\\AiProject\\pre_photo\\' #预处理后图片存放路径

#图片预处理

def preprocess(filename, name, t_path):

print(filename)

#设置缩略图大小

size = 128, 128

#glob.glob 返回所有匹配的文件路径列表(文件路径,

以字符串形式,构成的 list)

for infile in glob.glob(filename):

file, ext = os.path.splitext(infile)

im = Image.open(infile)

#z存储长边

z = 0

x,y = im.size

if x>y:

z = x

else:

z = y

try:

#用长边建立正方形

p = Image.new('RGB', (z,z), (255,255,255))

#查看图片rpg值

#print(np.array(p))

#粘贴

p.paste(im, (0, 0, x, y))

#缩略图

p.thumbnail(size)

#p.show()

#对比度拉伸(确保每个图像的像素范围从0到255)

p = ImageOps.autocontrast(p)

#p.show()

#判断路径是否存在,若不存在则创建

if not os.path.isdir(t_path):

os.makedirs(t_path)

#保存图片

p.save(t_path + '\\' + name + ".thumbnail.jpg",

"JPEG")

except Exception as e:

print(e)

#获取文件夹下所有文件,并调用预处理

def getfiles(dir):

s_path = src_source + dir

t_path = src_target + dir

# 输出所有文件和文件夹

for name in os.listdir(s_path):

filename = s_path + '\\' + name

#判断是否是文件

if os.path.isfile(filename) == True:

#去除扩展名

no_ext_name = os.path.splitext(name)[0]

preprocess(filename, no_ext_name, t_path)

if __name__ == '__main__':

getfiles('apple')

getfiles('banana')

第四步:图像特征和标签放入数组

这一步是为了将数据进行标示出来,进行监督性机器学习,示例代码如下:

img_features = []

img_labels = []

# 图像特征和标签放入数组

def Prepare_Image(filename, label):

im = Image.open(filename)

img_features.append(np.array(im).ravel())

img_labels.append(label)

# print(filename)

# print(label)

第五步:分离训练集和测试集

为了防止我们的模型发生过拟合或者欠拟合之类问题(具体定义自行百度),我们需要将数据进行拆分,用一部分数据进行训练,然后用剩余的数据进行准确性验证,这种也是监督学习模型特有的,这里我们用sklearn 库里现有的函数进行拆分,本示例中将数据集分成70%训练集30%测试集,示例代码如下:

def split_data(img_features, img_labels):

X_train, X_test, Y_train, Y_test = train_test_split(img_features, img_labels, test_size=0.30)#将数据集分成70%训练集30%测试集

train_model(X_train, Y_train, X_test, Y_test)

第六步:训练模型

基于训练数据集训练一个逻辑回归模型,示例代码如下:

def train_model(X_train, Y_train, X_test, Y_test):

# Set regularization rate

reg = 0.01

# print("*"*100)

# print(Y_train)

# 基于训练数据集训练一个逻辑回归模型

clf=LogisticRegression(C=1/reg,solver='lbfgs',multi_class='multinomial').fit(X_train, Y_train)

# print (clf)

#保存模型到本地

joblib.dump(clf, "train_model.m")

evaluate_model(X_test, Y_test, clf)

第七步:评估模型

用训练数据对模型进行训练之后,就可以用于预测数据,示例代码如下:

def evaluate_model(X_test, Y_test, clf):

predictions = clf.predict(X_test)

print('准确度: ', accuracy_score(Y_test, predictions))

第八步:使用模型

可以随机拿一张测试集中或者是其他类似的图片,输入模型中,让模型进行预计,观察模型预测的准确性如何,示例代码如下:

def use_model(clf):

img=Image.open("E:\\All\\AllInHere\\AiProject\\pre_photo\\banana\\41edw+BC UjL._AC_US436_QL65_.thumbnail.jpg") #在模型中输入一个banana的图片

img = np.array(img)

plt.imshow(img)

# 修改图像数据以匹配训练特征的格式

imgfeatures=np.array(ImageOps.equalize(Image.fromarray(img))). ravel().

reshape(1, -1)

pred = clf.predict(imgfeatures)

print('此图片是:', pred[0])


main 函数:

if __name__ == '__main__':

def getfiles(path , label): #数据特征与标签化处理

for name in os.listdir(path):

filename = path + '\\' + name

if os.path.isfile(filename) == True:

Prepare_Image(filename, label)

file_path = 'E:\\All\\AllInHere\\AiProject\\pre_photo'

#第一组图片测试数据

getfiles(file_path + '\\' + 'apple' , 'apple')

#第二组图片测试数据

getfiles(file_path + '\\' + 'banana' , 'banana')

split_data(np.array(img_features), np.array(img_labels))

执行后输出内容为:

准确度: 1.0

此图片是: banana

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-01-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 无量测试之道 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档