<jupyter_start><jupyter_text>다층 퍼셉트론 모델을 이용한 손글씨 분류  sklearn datasets digits* 0부터 9까지의 숫자에 대한 10개 클래스의 글씨 데이터* 총 1797개의 손글씨 데이터가 있으며* 각각의 손글씨 데이터는 8 x 8 격자(픽셀)로 이루어져 있다.<jupyter_code>import numpy as np
import random

from sklearn.datasets import load_digits
from sklearn.neural_network import MLPClassifier

import warnings
warnings.filterwarnings(action='ignore')

np.random.seed(100)<jupyter_output><empty_output><jupyter_text>데이터 불러오기<jupyter_code>def load_data(X, Y):
    # 앞의 1600개는 학습 데이터, 나머지는 테스트 데이터로 분리
    X_train = X[:1600,:]
    Y_train = Y[:1600]
    
    X_test = X[1600:,:]
    Y_test = Y[1600:]
    
    return X_train, Y_train, X_test, Y_test<jupyter_output><empty_output><jupyter_text>train_MLP_classifier* MLPClassifier 정의 및 hidden layer의 크기 조정* fit 모델 학습<jupyter_code>def train_MLP_classifier(X, Y):
    
    clf = MLPClassifier(hidden_layer_sizes=(100,100))

    clf.fit(X,Y)
    
    return clf<jupyter_output><empty_output><jupyter_text>report_clf_stats정확도를 출력<jupyter_code>def report_clf_stats(clf, X, Y):
    
    hit = 0
    miss = 0
    
    for x, y in zip(X, Y):
        if clf.predict([x])[0] == y:
            hit += 1
        else:
            miss += 1
    
    score = hit / len(X) * 100.
    
    print("Accuracy: %.1lf%% (%d hit / %d miss)" % (score, hit, miss))<jupyter_output><empty_output><jupyter_text>실행 및 출력<jupyter_code>def main():
    
    digits = load_digits()
    
    X = digits.data
    Y = digits.target
    
    X_train, Y_train, X_test, Y_test = load_data(X, Y)
    
    clf = train_MLP_classifier(X_train, Y_train)
    
    score = report_clf_stats(clf, X_test, Y_test)
    
    return score

if __name__ == "__main__":
    main()<jupyter_output>Accuracy: 92.9% (183 hit / 14 miss)<jupyter_text>---  전체 코드<jupyter_code>'''
1. 손글씨 데이터를 X, Y로 읽어온 후 
   학습 데이터, 테스트 데이터로 분리
'''

def load_data(X, Y):

    X_train = X[:1600,:]
    Y_train = Y[:1600]
    
    X_test = X[1600:,:]
    Y_test = Y[1600:]
    
    return X_train, Y_train, X_test, Y_test
    
'''
2. MLPClassifier를 정의하고 hidden_layer_sizes를
   조정해 hidden layer의 크기 및 레이어의 개수를
   조정한 후, 학습
'''

def train_MLP_classifier(X, Y):
    
    clf = MLPClassifier(hidden_layer_sizes=(100,100))
    
    clf.fit(X,Y)
    
    return clf

'''
3. 정확도를 출력하는 함수
'''

def report_clf_stats(clf, X, Y):
    
    hit = 0
    miss = 0
    
    for x, y in zip(X, Y):
        if clf.predict([x])[0] == y:
            hit += 1
        else:
            miss += 1
    
    score = hit / len(X) * 100.
    
    print("Accuracy: %.1lf%% (%d hit / %d miss)" % (score, hit, miss))

'''
4. main 함수 
   
'''

def main():
    
    digits = load_digits()
    
    X = digits.data
    Y = digits.target
    
    X_train, Y_train, X_test, Y_test = load_data(X, Y)
    
    clf = train_MLP_classifier(X_train, Y_train)
    
    score = report_clf_stats(clf, X_test, Y_test)
    
    return score

if __name__ == "__main__":
    main()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.12372535690006799, 'fraction_numerical': 0.030931339225016997, 'mean_word_length': 2.706549118387909, 'pattern_counts': {'":': 2, '<': 24, '<?xml version=': 0, '>': 24, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '6', 'dir': 'jupyter-structured-clean-dedup', 'id': '562066', 'license': 'MIT', 'n_tokens_mistral': 1469, 'n_tokens_neox': 1498, 'n_words': 278, 'path': 'code/MLPClassifier_digits.ipynb', 'repo_name': 'Soooyeon-Kim/Machine-Learning', 'size': '2942'}