날짜 : 2020년 11월 14일 토요일
해커톤 주제 : ML (Machine Learning)
사용 툴 : Google Colaboraty
사용 언어 : Python
팀 주제 : 사이킷런의 내장 자료(유방암 분석), 손글씨 분석, 유튜브 태그를 이용한 카테고리 추측
import numpy as np
import pandas as pd
%matplotlib inline
import matplotlib as plt
# 데이터 시각화 그래프 만들기
import sklearn.model_selection import train_test_split
# 랜덤으로 데이터를 뽑아 학습시킨 후 -> 나머지 것으로 타겟 데이터 대조
import sklearn.datasets import load_breast_cancer
# 유방암 데이터 import
cancer = load_breast_cancer
'''
in:
print(cancer.feature_names)
print(len(cancer.feature_names))
out:
['mean radius' 'mean texture' 'mean perimeter' 'mean area'
'mean smoothness' 'mean compactness' 'mean concavity'
'mean concave points' 'mean symmetry' 'mean fractal dimension'
'radius error' 'texture error' 'perimeter error' 'area error'
'smoothness error' 'compactness error' 'concavity error'
'concave points error' 'symmetry error' 'fractal dimension error'
'worst radius' 'worst texture' 'worst perimeter' 'worst area'
'worst smoothness' 'worst compactness' 'worst concavity'
'worst concave points' 'worst symmetry' 'worst fractal dimension']
30
'''
origin_data = cancer.data # 분석할 데이터 (데이터)
origin_target = canter.target # 타겟(답)
x_train, x_test = np.vsplit(origin_data, [400])
# 2차원배열인 origin_data를 0~399 idx까지 1개, 400~끝 idx까지 1개 총 2개로 나눔.
y_train, y_test = np.split(origin_target, [400])
# 1차원배열인 origin_target을 0~399, 400~끝 까지 2개의 배열로 나눔.
malignant = cancer.data[cancer.target == 0] # 악성
benign = cancer.data[cancer.target == 1] # 양성
'''
in:
print('x train length : ', len(xTrain))
print('x train length : ', len(yTrain))
print('y test length : ', len(xTest))
print('y test length : ', len(yTest))
print('malignant : ', len(malignant))
print('benign : ', len(benign))
out:
x train length : 400
x train length : 400
y test length : 169
y test length : 169
malignant : 212
benign : 357
'''
from sklearn.linear_model import LogisticRegression
'''
scores = []
for i in range(10):
x_train, x_test, y_train, y_test = train_test_split(cancer.data, cancer.target)
model = LogisticRegression()
model.fit(x_train, y_train)
score = model.score(x_test, y_test)
scores.append(score)
'''
# 10번을 시험으로 돌려서 가장 높은 정확도 찾기 위햠
# train_test_split : 랜덤으로 test, target을 분리해 줌
model = LogisticRegression()
model.fit(x_train, y_train) # model에 지도학습
from sklearn.svm import LinearSVC # LinearSVC 방식으로 fit(학습)
# svm : support vector machines(svm), 서포트 벡터 머신
'''
scores = []
for i in range(10):
x_train, x_test, y_train, y_test = train_test_split(cancer.data, cancer.target)
model = LinearSVC()
model.fit(x_train, y_train)
score = model.score(x_test, y_test)
scores.append(score)
'''
model = LinearSVC()
model.fit(x_train, y_train) # model에 지도학습
'''
in:
print(model.score(x_test, y_test))
out:
0.9526627218934911 # == 약 95%
'''
데이터를 학습시킨 후 나온 target값을 비교할 값이 필요하기 때문에 내장모듈에서 받아온 data, target을 총 569 → 400 + 169 로 나누어 진행하였다.
400개의 데이터를 지도학습시키고 새 랜덤값인 169개의 데이터가 들어왔을 때의 정확도를 판단하는 것이다.