TechTogetWorld

인공지능의 실전입문에 관한 글입니다.

알고리즘을 만드는것이 아니고, 만들어진 알로리즘을 활용하는 방법에 관한 글입니다.

자동차 운전을 위해 자동차를 만드는방법을 알필요는 없습니다. 물론 알면 좋기는 하겠지만, 서로 별도의 분야라고 할수있습니다.


본글은 학습용 데이터를 학습/테스트/측정하는 방법에 대한 글입니다.

글의 순서는 아래와 같습니다.


=========================================================================================


1. 외국어 문장 판별  => [ # 170814 7 xor-train ]

   . count=list(map(lambda n : n/total,count)) ==> 주의 " list " 를 넣치 않으면 error 발생

   . 언어별 알파벳 사용횟수가 틀리다는 점을 이용해서, 문장을 주고 영어인지 프랑스어인지 등 구분하는 알고리즘임. 유첨(학습,테스트 데이터)

lang.zip


2. 외국어별 알파벳 사용빈도을 그래프로 표식하여 비교 ==> [ 170816 3 lang-train graph ]

3. 독버섯과 식용버섯 구분==> [ #170819 3 mushroom-train ]

170819 1 mushroom.csv


4. 참고자료


=========================================================================================


[ # 170816 2 lang-train ]



from sklearn import svm, metrics

import glob, os.path ,re, json


files=glob.glob("./lang/train/*.txt")

train_data=[]

train_label=[]

for file_name in files :

    basename=os.path.basename(file_name)

    lang=basename.split("-")[0]

    file=open(file_name,"r",encoding="utf-8")

    text=file.read()

    text=text.lower()

    file.close()

    code_a = ord("a")

    code_z = ord("z")

    count = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]

    for character in text:

        code_current=ord(character)

        if code_a<=code_current <=code_z :

            count[code_current-code_a] +=1

    total=sum(count)

    count=list(map(lambda n : n/total,count))

#리스트에 넣기

    train_label.append(lang)

    train_data.append(count)

#print(train_data)

#print("=========================================================================")

#print(train_label)


files=glob.glob("./lang/test/*.txt")

test_data=[]

test_label=[]

for file_name in files :

    basename=os.path.basename(file_name)

    lang=basename.split("-")[0]

    file=open(file_name,"r",encoding="utf-8")

    text=file.read()

    text=text.lower()

    file.close()

    code_a = ord("a")

    code_z = ord("z")

    count = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]

    for character in text:

        code_current=ord(character)

        if code_a<=code_current <=code_z :

            count[code_current-code_a] +=1

    total=sum(count)

    count=list(map(lambda n : n/total,count))

#리스트에 넣기

    test_label.append(lang)

    test_data.append(count)

#print(train_data)

#print("=========================================================================")

#print(train_label)


clf = svm.SVC()

clf.fit(train_data, train_label)

predict=clf.predict(test_data)

score=metrics.accuracy_score(test_label, predict)

print("score=",score)

report=metrics.classification_report(test_label, predict)

print("--------report-----------")

print(report)



[ 170816 3 lang-train graph ]


from sklearn import svm, metrics

import glob, os.path ,re, json

import matplotlib.pyplot as plt

import pandas as pd



files=glob.glob("./lang/train/*.txt")

train_data=[]

train_label=[]

for file_name in files :

    basename=os.path.basename(file_name)

    lang=basename.split("-")[0]

    file=open(file_name,"r",encoding="utf-8")

    text=file.read()

    text=text.lower()

    file.close()

    code_a = ord("a")

    code_z = ord("z")

    count = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]

    for character in text:

        code_current=ord(character)

        if code_a<=code_current <=code_z :

            count[code_current-code_a] +=1

    total=sum(count)

    count=list(map(lambda n : n/total,count))

#리스트에 넣기

    train_label.append(lang)

    train_data.append(count)


# 그래픽 준비하기

graph_dict={}

for i in range(0,len(train_label)):

    label = train_label[i]

    data = train_data[i]

    if not (label in graph_dict) :

        graph_dict[label]=data

asclist=[[chr(n) for n in range(97,97+26)]]

print(asclist)

df=pd.DataFrame(graph_dict, index=asclist)


# 그래프 그리기

plt.style.use('ggplot')

df.plot(kind="bar",subplots=True,ylim=(0,0.15))

plt.savefig('lang-plot.png')





[ #170819 3 mushroom-train ]

import pandas as pd

from sklearn.ensemble import RandomForestClassifier

from sklearn import metrics

from sklearn.model_selection import train_test_split

# 데이터 읽어 들이기--- (※1)

mr = pd.read_csv("170819 1 mushroom.csv", header=None)

# 데이터 내부의 기호를 숫자로 변환하기--- (※2)

label = []

data = []

attr_list = []

for row_index, row in mr.iterrows():

    label.append(row.ix[0])

    row_data = []

    for v in row.ix[1:]:

        row_data.append(ord(v))

    data.append(row_data)

# 학습 전용과 테스트 전용 데이터로 나누기 --- (※3)

data_train, data_test, label_train, label_test = \

    train_test_split(data, label)

# 데이터 학습시키기 --- (※4)

clf = RandomForestClassifier()

clf.fit(data_train, label_train)

# 데이터 예측하기 --- (※5)

predict = clf.predict(data_test)

# 결과 테스트하기 --- (※6)

ac_score = metrics.accuracy_score(label_test, predict)

cl_report = metrics.classification_report(label_test, predict)

print("정답률 =", ac_score)

print("리포트 =\n", cl_report)



[참고자료]


https://www.docker.com/products/docker-toolbox  ==> docker 설치방법

https://www.data.go.kr/main.do