기본 콘텐츠로 건너뛰기

2월, 2023의 게시물 표시

Python Gower

# Gower 모듈 설치 # 범주형, 연속형 데이터를 가진 행들간의 비유사도 계산 !pip install gower 예제 customers = {     'age':[22,25,30,34,45,34,50,47,59,62],     'gender':['m','m','f','m','f','m','f','f','m','f'],     'marriage':['y','n','n','y','y','n','y','y','n','y'],     'salary':[3400,3500,4300,3900,4020,4800, 5030,2900,4500,3400],     'children':[True, False,False,True,True,False,True,False,True,False],     'purchase_type':['low','low','low','heavy','heavy','low','heavy','low','heavy','low'] } import pandas as pd df = pd.DataFrame(customers) df.index = ['user01','user02','user03','user04','user05','user06','user07','user08','user09','user10'] df age g

Python DBSCAN 예제

예제 from sklearn.cluster import DBSCAN from sklearn.datasets import make_blobs import matplotlib.pyplot as plt X, y = make_blobs(n_samples=50, n_features=2, centers=3, random_state=1) X.shape # (50, 2) y.shape # (50,) dbscan = DBSCAN(eps=2, min_samples=5, metric="euclidean") # eps : 반경, min_samples : 최소 dbscan.fit(X) dbscan.labels_ clusters = dbscan.fit_predict(X) # 한글 깨짐 없이 나오게 설정 from matplotlib import rcParams # 인코딩 폰트 설정 rcParams['font.family'] = 'New Gulim' rcParams['font.size'] = 10 plt.figure(figsize=(10,4)) plt.subplot(1,2,1) plt.title("정답") plt.scatter(X[:,0],X[:,1],c=y) plt.subplot(1,2,2) plt.title("추정") plt.scatter(X[:,0],X[:,1],c=clusters) plt.show()

DBSCAN

DBSCAN(Density-based spatial clustering of applications with noise) 밀도기반 클러스터링 알고리즘 core point : 주어진 반경 내에 minPts개 이상의 포인트를 가진 점 epilone: : 반경 minPts : core point 가 되기 위해서는 반경 내에 최소한 minPts 이상의 점이 요구됨

Python Kmodes

# !pip install kmodes # !pip install kmodes import matplotlib.pyplot as plt from kmodes.kmodes import KModes  import pandas as pd import numpy as np data = np.array([['A', 'B', 'C'],                  ['B', 'C', 'A'],                  ['C', 'A', 'B'],                  ['A', 'C', 'B'],                  ['A', 'A', 'B'],                  ['A', 'B', 'B'],                  ['B', 'C', 'B'],                  ['C', 'B', 'B'],                  ['B', 'A', 'C'],                  ['C', 'C', 'A']]) # Elbow curve to find optimal K cost = [] clusters = [] K = range(1,6) for k in list(K):     kmode = KModes(n_clusters=k,              # 클러스터 수를 지정                    init="random", n_init=5,   # 로컬 미니마를 방지하기위해 centroid를 달리하여 5회 반복                    verbose=1

Python Deep Learning 예제

예제 import matplotlib.pyplot as plt from sklearn.datasets import make_blobs X, y = make_blobs(n_samples=150, n_features=2, centers=3, random_state=0) X.shape # (150, 2) y.shape # (150,) import pandas as pd pd.Series(y).value_counts() 1 50 0 50 2 50 dtype: int64 from sklearn.cluster import KMeans km = KMeans(n_clusters=3, random_state=0) # 비지도 학습 pred = km.fit_predict(X) pd.Series(pred).value_counts() 2 52 1 50 0 48 dtype: int64 # 한글 깨짐 없이 나오게 설정 from matplotlib import rcParams # 인코딩 폰트 설정 rcParams['font.family'] = 'New Gulim' rcParams['font.size'] = 10 plt.figure(figsize=(10,4)) plt.subplot(1,2,1) plt.scatter(X[:,0],X[:,1],c=pred,s=10) plt.title('추정') plt.subplot(1,2,2) plt.scatter(X[:,0],X[:,1],c=y,s=10) plt.title('정답') plt.show() # 학습된 클러스터들의 centroids를 화면에 표시해본다 centroids = km.cluster_centers_ centroids array([[ 0.91563959, 4.44602508], [-1.73388472, 3.00577412], [ 2.07417555, 1.04097145]]) # 적색 별 모양의 표시를 각 ce

Python Deep Learning, Unsupervised Learning(비지도 학습)

Unsupervised Learning(비지도 학습) - 군집(Clustering) - 학습 데이터에 정답(Label)이 없음 - 데이터의 분포 형태에 따라서 분류 - 위치가 비슷한 데이터는 동일 클러스터에 포함 - 연속형(수치) 데이터만 있는 경우, K-Means 알고리즘(K:분류의 갯수,Mean:평균값) - 범주형(Categorical:수치가 아닌것) 데이터만 있는 경우, K-Modes 알고리즘(K:분류의 갯수,Mode:최빈값,빈도가 제일높은 값) - 연속형, 범주형 혼합된 경우, DBSCAN(Gower 거리:유사도가 높으면 거리가 짧고, 유사도가 낮으면 거리가 길다) 회귀(Regression) / 분류(Classification) - 결과가 연속형 - 회귀 - 결과가 범주형 - 분류

Python Sklearn make_blobs

from sklearn.datasets import make_blobs 예제 X, y = make_blobs(n_samples=500, centers=3, n_features=2, random_state=0) # 500개의 점을 3개로 모이게 한다, 변수는 2개, 무작위 상태는 0 X.shape, y.shape # ((500, 2), (500,)) plt.scatter(X[:,0],X[:,1],c=y,s=5) plt.show() # 학습 데이터 나누기 from sklearn.model_selection import train_test_split x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=.25, random_state=0) x_train.shape, x_test.shape, y_train.shape, y_test.shape # ((375, 2), (125, 2), (375,), (125,)) # 지도 학습 하기 from sklearn.linear_model import LogisticRegression logisticReg = LogisticRegression(max_iter=5000) # 기본 반복 100 logisticReg.fit(x_train, y_train) # 추정하기 pred = logisticReg.predict(X) # 결정계수 logisticReg.score(x_test, y_test) # 0.92 # 한글 깨짐 없이 나오게 설정 from matplotlib import rcParams # 인코딩 폰트 설정 rcParams['font.family'] = 'New Gulim' rcParams['font.size'] = 10 # 산점도 plt.figure(figsize=(10,4)) plt.subplot(1,2, 1) plt.scatter(X[:,0],X[:,1],c=y) plt.title('정답') plt.su

Python Sklearn load_digits

from sklearn.datasets import load_digits 예제 digits = load_digits() from sklearn.datasets import load_digits digits = load_digits()type(digits) # sklearn.utils.Bunch isinstance(digits, dict) # True digits.keys() dict_keys(['data', 'target', 'frame', 'feature_names', 'target_names', 'images', 'DESCR']) digits['data'].shape, digits['target'].shape # ((1797, 64), (1797,)) # 이미지 데이터 보기 import numpy as np plt.figure(figsize=(20,4)) # 20인치, 4인치 for index, (img, label) in enumerate(zip(digits['data'][:5],digits['target'][:5])):     # 1 ~ 5까지 이미지를 그리기     plt.subplot(1,5, index+1)     plt.imshow(np.reshape(img,(8,8)), cmap=plt.cm.gray)     plt.title('%s'%label, fontsize=20) from sklearn.model_selection import train_test_split x_train, x_test, y_train, y_test = train_test_split(digits.data, digits.target, test_size=.25, random_state=0) x_train.shape, x_test.shape, y_train.shape, y_test.shape # ((1347,

Python Sklearn make_regression

from sklearn.datasets import make_regression import matplotlib.pyplot as plt X, y = make_regression(n_samples=250, n_features=1, noise=50, random_state=2) plt.scatter(X,y, s=2) plt.show() from sklearn.linear_model import LinearRegression from sklearn.model_selection import train_test_split # 한글 깨짐 없이 나오게 설정 from matplotlib import rcParams # 인코딩 폰트 설정 rcParams['font.family'] = 'New Gulim' rcParams['font.size'] = 10 x_train, x_test, y_train, y_test = train_test_split(X,y, test_size=.20, random_state=0) x_train.shape, x_test.shape, y_train.shape, y_test.shape # 모델 생성 model = LinearRegression() # 학습하기 model.fit(x_train, y_train) # 가중치, 편향치 구하기 model.coef_, model.intercept_ # (array([90.11061494]), 2.4224269924448585) # 결정 계수 model.score(x_train, y_train) # 0.789267454050733 # 추정 pred = model.predict(x_test) # 산점도 plt.scatter(x_test,y_test) plt.plot(x_test, pred, 'r-') plt.show() # 추정 model.predict([[3.0]]) # 학습할 때 주는 데이터의 형식을 따른다 # x의 최소값, 최대값을 계수와 절편을 사용하여

Python Sklearn load_boston

from sklearn.linear_model import LinearRegression # Linear : 선형, Regression : 회귀 from sklearn.model_selection import train_test_split # train : 학습용, test : 검증용 from sklearn.datasets import load_boston # 집 정보 예제 # 문제, 정답을 가진 데이터 : 지도학습을 위한 데이터 준비 boston = load_boston() # Data Frame 생성 import pandas as pd sample_boston = pd.DataFrame(boston.data,columns=boston.feature_names) sample_boston['target'] = pd.DataFrame(boston.target) sample_boston CRIM ZN INDUS CHAS NOX RM AGE DIS RAD TAX PTRATIO B LSTAT target 0 0.00632 18.0 2.31 0.0 0.538 6.575 65.2 4.0900 1.0 296.0 15.3 396.90 4.98 24.0 1 0.02731 0.0 7.07 0.0 0.469 6.421 78.9 4.9671 2.0 242.0 17.8 396.90 9.14 21.6 2 0.02729 0.0 7.07 0.0 0.469 7.185 61.1 4.9671 2.0 242.0 17.8 392.83 4.03 34.7 3 0.03237 0.0 2.18 0.0 0.458 6.998 45.8 6.0622 3.0 222.0 18.7 394.63 2.94 33.4 4 0.06905 0.0 2.18 0.0 0.458 7.147 54.2 6.0622 3.0 222.0 18.7 396.90 5.33 36.2 ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 501 0.06263 0.0 11.93 0.0 0