본문 바로가기
AI

Day63_Ai(1)_Pm

by roaring90s 2025. 10. 27.

p : 경우의 수가 
np : 경우의 수가 많은것 현재 컴퓨터로 현재 시간에 처리를 할 수 없는것 2*

 

machine-learing 은 근사 알고리즘이다.

지도학습 = 어떠한 인풋값을 전달 해주고 이 인풋에 해당하는건 정답이 있다.

그래서 데이터가 쌍으로 가지고 있어야 한다.(target) / 인풋값 과 정답(target) 의 관계를 학습시키는것

 

비지도 학습 = 정답이 없다.

입력으로 넣어준 값을 target 으로 설정한다. 분포도에 관한걸 학습시키는 것 

 

강화 학습 (reinforcement) =  심리학에서 가져온 단어

배고픈 쥐를 케이스 안에 넣어 놓고 레버를 하나 넣어놓음, 해당 레버를 누를 시 먹이가 나오는 케이지

어떤한 것을 시행을 하고 그것에 대한 보답을 주는 방식 / 추상적이다.

 

 

 

지도학습

 

비지도 학습

데이터를 압축하는데 의미도 있다.

실제로 대표되는 값들이 있고 그것을 사용하여 차원축소

 

 


 

어떤 입력값을 줫을때 현재 모델이 있으면 그것에 대한 예측값을 내놓는데 이미 그것에 따른 답이 있으니 오차분석하고 론칭하는것을 ai 한테 넘기는것

위에거 모두 써 볼 예정

k-최근접 이웃 = 제일 하기 쉽지만, 성능이 그만큼 제일 떨어짐

설치하기 / 머신러닝

 


 

dataSamplewEx

from sklearn.datasets import make_regression
import matplotlib.pyplot as plt

features, target, coefficients = make_regression(n_samples=500,
                n_features=2,   #input값에 대한 특성 수 features,
                n_informative=2,    #타겟이 영향력을 끼치는것의 수
                n_targets=1,     # 정답의 수
                noise=0.0,
                coef= True,         #
                random_state=1      #안에 들어가는 데이터를 랜덤하게 넣는다. (seed)
                )
rvalue = make_regression(n_samples=500,  #데이터 샘플을 몇개 가지고 올것인가?
                n_features=2,   #input값에 대한 특성 수 features,
                n_informative=2,    #타겟이 영향력을 끼치는것의 수
                n_targets=1,     # 정답의 수
                noise=0.0,
                coef= True,         #
                random_state=1      #안에 들어가는 데이터를 랜덤하게 넣는다. (seed)
                )

# print(rvalue)
# print(len(rvalue))
print(features)
print(features.shape)
print(target.shape)
print(coefficients)

plt.scatter(features[:,0], features[:,1])
plt.show()

from sklearn.datasets import make_classification

features, targets = make_classification(n_samples=300,
                                        n_features=3,
                                        n_informative=3,
                                        n_redundant=0,    #하나의 속성이 아니라 여러개 묶을때 ex) bmi 지수
                                        n_classes=2,
                                        weights=[0.25,0.75], #비율
                                        random_state=1)
print()
print(features)
print(targets)
print()

 

군집데이터 만들기

#==========================군집데이터===============================

from sklearn.datasets import make_blobs

features, target = make_blobs(n_samples=500,
                              n_features=2,
                              centers=4,     #클러스트 / 4개의 군집을 만들겠다.
                              cluster_std=1,
                              shuffle=True, #섞을것인가
                              random_state=1)

print(targets)
plt.scatter(features[:,0], features[:, 1], c=target, s=30)
plt.show()

서클

#========================써클===================
from sklearn.datasets import make_circles

features, targets = make_circles(n_samples=100,
                                 factor=0.1,
                                 noise=0.1)
plt.scatter(features[:,0], features[:, 1], c=targets, s=50)
plt.show()

여기서 factor 를 0.5로 바꿨을 시

factor 안에 노란색의 점들의 반지름 값을 뜻한다.

 

문스

#====================문스=====================
from sklearn.datasets import make_moons

features, targets = make_moons(n_samples=400,
                               noise=0.1,
                               random_state=1)

plt.scatter(features[:,0], features[:, 1], c=targets, marker='o', s=50)
plt.show()

클러스팅?

 

 


 

k = 이웃에 대한 갯수

ex) k =1 이면 가장 가까운 이웃을 찾는다.

 

KNNEx1

import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.neighbors import KNeighborsClassifier

x, y = make_blobs(n_samples=500,
                  n_features=2,
                  centers=4,
                  cluster_std=1.5,
                  random_state=4)

plt.figure(figsize=(8,8))
plt.scatter(x[:,0], x[:,1], marker='*', edgecolors='k', s=80)
plt.show()

 

knn5 = KNeighborsClassifier(n_neighbors=5)   #근접된 이웃에 대해 몇개를 쓸것인지?
knn1 = KNeighborsClassifier(n_neighbors=1)

knn5.fit(x,y)       #모델을 학습시키겠다 x =input 값  y = target 값을 넣겠다.
knn1.fit(x,y)

y_pred5 = knn5.predict(x)
y_pred1 = knn1.predict(x)

from sklearn.metrics import accuracy_score
print('accuracy with k=5 : ', accuracy_score(y, y_pred5) * 100)
#정답 y 와 예측값 y_pred5 를 비교햇을 시 나오는 퍼센트
#accuracy with k=5 :  95.6
print('accuracy with k=1 : ', accuracy_score(y, y_pred1) * 100)
#accuracy with k=1 :  100.0

train 데이터는 학습진행, test 데이터는 평가진행을 할꺼야

07 : 0.3 이나 0.8: 0.2 비율로 하고 데이터량에 따라 설정해야 한다.

 

from sklearn.model_selection import train_test_split

x_train, x_test, y_train, y_test = train_test_split(x, y , test_size=0.25, random_state=0)
#trian data 는 75% test data는 25%

knn5.fit(x_train, y_train)
knn1.fit(x_train, y_train)

y_pred5 = knn5.predict(x_test)
y_pred1 = knn1.predict(x_test)

from sklearn.metrics import accuracy_score
print('accuracy with k=5 : ', accuracy_score(y_test, y_pred5) * 100)
#accuracy with k=5 :  93.60000000000001
print('accuracy with k=1 : ', accuracy_score(y_test, y_pred1) * 100)
#accuracy with k=1 :  90.4
# k = x  / x 를 하이퍼파라미터라고 함

 

#그래프를 통해서 좀더 직관적으로 확인하기
plt.figure(figsize=(12,5))
plt.subplot(121)
plt.scatter(x_test[:,0], x_test[:,1], c=y_pred5, marker='*', edgecolors='k',s=80)
plt.title('predicted values with k=5', fontsize=17)

plt.subplot(122)
plt.scatter(x_test[:,0], x_test[:,1], c=y_pred1, marker='*', edgecolors='k',s=80)
plt.title('predicted values with k=1', fontsize=17)
plt.show()

 


KNNEx2

#물고기들에 대한 길이와 무게
import matplotlib.pyplot as plt

bream_length = [25.4, 26.3, 26.5, 29.0, 29.0, 29.7, 29.7, 30.0, 30.0, 30.7, 31.0, 31.0, 31.5, 32.0, 32.0, 32.0, 33.0, 33.0, 33.5, 33.5, 34.0, 34.0, 34.5, 35.0, 35.0, 35.0, 35.0, 36.0, 36.0, 37.0, 38.5, 38.5, 39.5, 41.0, 41.0]
bream_weight = [242.0, 290.0, 340.0, 363.0, 430.0, 450.0, 500.0, 390.0, 450.0, 500.0, 475.0, 500.0, 500.0, 340.0, 600.0, 600.0, 700.0, 700.0, 610.0, 650.0, 575.0, 685.0, 620.0, 680.0, 700.0, 725.0, 720.0, 714.0, 850.0, 1000.0, 920.0, 955.0, 925.0, 975.0, 950.0]


smelt_length = [9.8, 10.5, 10.6, 11.0, 11.2, 11.3, 11.8, 11.8, 12.0, 12.2, 12.4, 13.0, 14.3, 15.0]
smelt_weight = [6.7, 7.5, 7.0, 9.7, 9.8, 8.7, 10.0, 9.9, 9.8, 12.2, 13.4, 12.2, 19.7, 19.9]

plt.scatter(bream_length, bream_weight)
plt.scatter(smelt_length, smelt_weight)
plt.xlabel('length')
plt.ylabel('weight')
plt.legend(loc='best')
plt.show()


 

length = bream_length + smelt_length
weight = bream_weight + smelt_weight

fish_data = [[l,w] for l, w in zip(length, weight)]
print(fish_data)
# bream = 35개 [1]로 정의, smelt = 14개 [0]로 정의
fish_target = [1] * 35 + [0] * 14
print(fish_target)

from sklearn.model_selection import train_test_split

x_train, x_test, y_train, y_test = train_test_split(fish_data, fish_target,
                                                    test_size=0.2, random_state=42)

from sklearn.neighbors import KNeighborsClassifier

kn = KNeighborsClassifier(n_neighbors=5)
kn.fit(x_train,y_train)
print('test data accuracy :', kn.score(x_test, y_test) * 100)

# from sklearn.metrics import accuracy_score
# print('accuracy_score :', accuracy_score(y_test, ))

predict = kn.predict([[30,600]])
print('length:30 weight:600 predict =>', predict)

plt.scatter(bream_length, bream_weight, label='bream')
plt.scatter(smelt_length, smelt_weight, label='smelt')
plt.scatter(30, 600, marker='^')
plt.xlabel('length')
plt.ylabel('weight')
plt.legend(loc='best')
plt.show()

 


 

'AI' 카테고리의 다른 글

Day65_Ai(3)_Pm  (0) 2025.10.29
Day65_Ai(3)_Am  (0) 2025.10.29
Day64_Ai(2)_Pm  (0) 2025.10.28
Day64_Ai(2)_Am  (0) 2025.10.28
Day63_Ai(1)_Am / 머신러닝 가기전 최소한의 수학  (0) 2025.10.27