玖叶教程网

前端编程开发入门

机器学习之逻辑回归

第一步:定义问题

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

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


第二步:收集数据

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

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


第三步:准备数据

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

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

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言