본문 바로가기

Tech Stack/AICE - Associate

AICE - associate 실습1

Raw Data

라벨링이 되어있지 않음

Labeled Data

실시간 데이터가 아니라 정확도가 낮음

 

def html_num_whitespace(soup):
    try:
        # soup > body > text > count
        NullCount = soup.body.text.count(' ')
        return float(NullCount)
    except:
        return 0.0

NullCount = soup.body.text.count(' ')

 

 

 

def html_num_characters(soup):
    try:
        #soup > body > text
        bodyLen = len(soup.body.text)
        return float(bodyLen)
    except:
        return 0.0

다음 코드와

def html_num_whitespace(soup):
    try:
        # soup > body > text > count
        NullCount = soup.body.text.count(' ')
        return float(NullCount)
    except:
        return 0.0
  • html_num_characters 함수는 <body> 태그 내의 모든 문자를 계산합니다(공백, 구두점, 문자 등 모두 포함). 이 함수는 텍스트의 총 길이를 파악하는 데 사용됩니다.
  • html_num_whitespace 함수는 <body> 태그 내의 텍스트에서 공백만을 대상으로 계산합니다. 이는 텍스트의 서식 및 구조를 분석하는 데 유용할 수 있습니다.
def html_link_in_script(soup):
    numOfLinks = len(soup.findAll('script', {"src": True}))
    numOfLinks += len(soup.findAll('script', {"href": True}))
    return float(numOfLinks)

 

데이터는 하나의 프로세스로 처리하기 어려움 따라서, 병렬로 처리하는 것을 고려

 

데이터 분리

X = df.iloc[:,0:len(df.columns)-1].values
y = df.iloc[:,len(df.columns)-1].values

# train_test_split 사용
train_x, val_x, train_y, val_y = train_test_split(X, y,test_size=0.3,random_state=2021)

 

confution matrix활용 함수

def plot_confusion_matrix(ax, matrix, labels = ['malicious','benign'], title='Confusion matrix', fontsize=9):
    ax.set_xticks([x for x in range(len(labels))])
    ax.set_yticks([y for y in range(len(labels))])

    # Place labels on minor ticks
    ax.set_xticks([x + 0.5 for x in range(len(labels))], minor=True)
    ax.set_xticklabels(labels, rotation='90', fontsize=fontsize, minor=True)
    ax.set_yticks([y + 0.5 for y in range(len(labels))], minor=True)
    ax.set_yticklabels(labels[::-1], fontsize=fontsize, minor=True)

    # Hide major tick labels
    ax.tick_params(which='major', labelbottom='off', labelleft='off')

    # Finally, hide minor tick marks
    ax.tick_params(which='minor', width=0)

    # Plot heat map
    proportions = [1. * row / sum(row) for row in matrix]
    ax.pcolor(np.array(proportions[::-1]), cmap=plt.cm.Blues)

    # Plot counts as text
    for row in range(len(matrix)):
        for col in range(len(matrix[row])):
            confusion = matrix[::-1][row][col]
            if confusion != 0:
                ax.text(col + 0.5, row + 0.5, int(confusion),
                        fontsize=fontsize,
                        horizontalalignment='center',
                        verticalalignment='center')

    # Add finishing touches
    ax.grid(True, linestyle=':')
    ax.set_title(title, fontsize=fontsize)
    ax.set_xlabel('prediction', fontsize=fontsize)
    ax.set_ylabel('actual', fontsize=fontsize)

    plt.show()

배깅과 부스팅의 차이

 

외워야 할 부분

 

confusion matrix

confusion = confusion_matrix(val_y, abc_pred)
fig, ax = plt.subplots(figsize=(10, 3))
plot_confusion_matrix(ax, confusion, fontsize=30)

 

가중치 확인

# feature_importances_ 활용 Feature별 가중치 확인

plt.figure(figsize=(20, 12))
plt.barh(y=Train_Data.columns[:-1],
         width = rfc.feature_importances_)

plt.show()


plt.show()