我的创作纪念日

机缘

成为创作者的初心其实很简单,当时正值准备考研的时期,我的放松活动也就需要变得既能愉悦身心又不要玩物丧志,因此我便找到了写博客这么一个方式,恰好赶上 CSDN 官方的活动以及我当时确实编写出了十分满意的程序,我的第一篇博客便这么诞生了。


收获

在第一篇博客发布后,我并未马上收到很多的阅读量,但是CSDN源源不断的传作激励活动给了我继续创作下去的动力与乐趣,那段时间里传作博客是我是我日常生活中重要的组成部分,带给我很多轻松与快乐。在2020年上半年的时候,我把自己毕设时遇到的问题整理成博客发表了出去,随着时间的推移,那两篇博客的阅读量持续上涨,大大超出我的预期,至今,那仍是我阅读量最高的博客,我也将它们放到了主页置顶的位置。从创作到今天我收获了下面让我自豪与满意的成果。

  1. 收获了可观的阅读量与粉丝关注,感谢他们的关注与支持
  2. 获得了很多粉丝的求助,同样也得到了一些批评指定,很高兴可以帮助到大家,同时收到大家的意见建议
  3. 多次参与博客之星评选活动,在投票过程中认识了很多牛人大咖
    我的创作纪念日_第1张图片

日常

最近一年发生了很多事情,我没有编写很多程序,博客也就几乎没有发布,但我在 CSDN 的问答区找到了新的放松方式,在这里有一些难以解决的问题,而我则选择自己的专业领域给出尽可能正确的解答。在这一年里我回答了许多的问题,每次的采纳都让我十分开心与自豪。


成就

目前为止,我自己最满意的代码仍是我第一篇博客编写的代码,这段代码是机器学习书籍上的一个习题,机器学习的课后习题有博主做出了详细的整理,但当时我并未找到该题的代码,因此我便自己尝试编写代码,并最终运行出了一个结果。

# -*- coding: utf-8 -*-
"""
Created on Sun Apr 21 11:57:22 2019
@author: lazyn
"""
 
import os
from sklearn.linear_model import LogisticRegression
import numpy as np
import pandas as pd
import warnings
from createPlot import createPlot
import matplotlib.pyplot as plt  
 
warnings.filterwarnings("ignore")
 
#定义连续值处理函数
def con_deal(temp_df, a):
    for j in range(0, len(temp_df)):
        temp_df.iat[j] = 0 if(temp_df.iat[j] < a) else 1
    return temp_df
 
#定义计算连续值正确率的函数
def con_acc(data, Y):
    a = np.sort(np.array(data))
    a = (a[0: len(a) - 1] + a[1: len(a)])/2
    max_acc, ind = 0, 0
    for i in range(0, len(a)):
        temp_df = con_deal(data.copy(), a[i]) 
        X0 = np.array(temp_df).reshape(-1, 1)
        logreg = LogisticRegression()
        logreg.fit(X0, Y)
        acc = logreg.score(X0, Y)
        if max_acc < acc:
            max_acc = acc
            ind = i
            temp_df0 = X0
    print(round(max_acc, 3), end = ', 判断结果为:\n')
    print(logreg.predict(temp_df0))
    return [max_acc, a[ind]]
 
#获取根节点函数
def getroot(X1, Y1, m):
    max_acc = 0
    for i in m:
        if i != '密度' and i != '含糖率':
            print(i + '节点, 正确率为', end = ':')
            X0 = np.array(X1[i]).reshape(-1, 1) 
            logreg = LogisticRegression()
            logreg.fit(X0, Y1)
            acc = logreg.score(X0, Y1)
            print(round(acc, 3), end = ', 判断结果为:\n')
            print(logreg.predict(X0))
            if max_acc < acc:
                max_acc = acc
                root = i
        else:
            print(i + '节点, 正确率为', end = ':')
            acc = con_acc(X1[i], Y1)[0]
            if max_acc < acc:
                max_acc = acc
                root = i
    return root
 
#获取决策树数组函数
def gettree(X, Xo, Y, m):
    n1, n2 = [], []  
    root = getroot(X, Y['好瓜'], m)
    print('故选择' + root + '为根节点')
    n1.append(root)
    m.remove(root) 
    if root == '密度' or root == '含糖率':
        div = con_acc(X[root], Y['好瓜'])[1]
        X[root], Xo[root], Y[root] = con_deal(X[root], div), con_deal(Xo[root], div), con_deal(X[root], div)
#    print(X, Xo)
    Attr, Attro = X[root].unique(), Xo[root].unique()
#    print(Attr, Attro)
    for j, jo in zip(Attr, Attro):
        n3 = []
        if root == '密度' or root == '含糖率':
            if j >= div:
                key = '≥' + str(div)
            else:
                key = '<' + str(div)
        else:
            key = jo
        print(root + '为' + key + '时:')  
        n3.append(key)
        X1 = X[X[root] == j]
        Xo1 = Xo[Xo[root] == jo]
        Y0 = Y[Y[root] == j]
        Y1 = Y0['好瓜']
        if Y1.unique().size > 1:
            Xn, Xon, Yn = X1, Xo1, Y0
            n3.append(gettree(Xn, Xon, Yn, m))   
        else:
            flag = '好瓜' if Y1.unique() == '是' else '坏瓜'
            print(flag)
            n3.append(flag)
        n2.append(n3)
    n1 += n2
    return n1        
 
#数组处理及绘制函数
def dealanddraw(n0, pngname):
    alstr = str(n0)
    alstr = alstr.replace(',', ':'); alstr = alstr.replace(']: [', ',')
    alstr = alstr.replace(']:', '],')
    alstr = alstr.replace('[', '{'); alstr = alstr.replace(']', '}')
    inTree = eval(alstr)
#    print(inTree)
    plt.figure(figsize = (10, 7))
    createPlot(inTree)
#    dpi, 控制每英寸长度上的分辨率;bbox_inches, 能删除figure周围的空白部分
    plt.savefig(pngname, dpi = 400, bbox_inches = 'tight')
        
f = open('watermelon3.txt')
watermelon3_df = pd.read_table(f)
Xo = watermelon3_df[['色泽',	'根蒂', '敲声', '纹理', '脐部', '触感', '密度', '含糖率']]
m = list(watermelon3_df.columns)
h = 0.001
for i in m:
    if i != '密度' and i != '含糖率' and i != '好瓜':
        size_mapping = {}
        m0 = watermelon3_df[i].unique()
        j = 1
        for i0 in m0:
            size_mapping[i0] = j
            j += 1
#        print(size_mapping)
        watermelon3_df[i] = watermelon3_df[i].map(size_mapping)
        
X = watermelon3_df[['色泽',	'根蒂', '敲声', '纹理', '脐部', '触感', '密度', '含糖率']]
Y = watermelon3_df
m = list(X.columns)
n0 = gettree(X, Xo, Y, m)
pngname = os.path.basename(os.path.realpath(__file__)).replace('py', 'png')
dealanddraw(n0, pngname)

这段代码现在看来十分青涩与初级,在当时带给我的成就感是难以忘怀的。


憧憬

未来我会从事计算机视觉相关的工作,希望可以做出小小的贡献,让这个世界更多的东西被计算机“看见”。

Tips

  1. 您发布的文章将会展示至 里程碑专区 ,您也可以在 专区 内查看其他创作者的纪念日文章
  2. 优质的纪念文章将会获得神秘打赏哦

你可能感兴趣的:(程序人生)