Machine Learning - 비지도학습

Machine Learning - 비지도학습

1. 패턴 : Association Rule

2. 군집 : Classifiacation

3. 그래프 : graph

4. 추천 : recommendation

Machine Learning 모형 구분 지도학습 비지도학습 (Unsupervised Learning) target x 1. Association Rule 기저기와 맥주 ? 다수의 거래 내역 각각에 포함된 품목(ITEM)의 관찰을 통해 규칙 발견 인과관계가 있을 수 있지만 해석은 그렇게 하면 안됨 모든 데이터를 Categorical 가정 ( Numeric data에는 적절하지 않음 ) 장바구니 분석에 처음 사용됨 예 : Bread > Milk Lift (향상도) , support, confidence 향상도 의미 : A를 고려한 b의 구매확률을 A를 고려하지 않은 B의 구매확률로 나눈 것으로, 이 값이 높다면 우연에 의해 연관성이 나타남 두 값이 독립인 경우에는 분모 분자가 동이라고 LIFT 향상도 = 1 , 독립이 아닌 경우(연관된 경우)에는 분모, 분자 값이 다르게됨 LIFT = P(B|A) / P(B) = P(A교집합B) / (P(A)*P(B)) 실제 분석시 지지도로 일정 구매비율 이상의 항목을 찾기 대신 실제로 연관성이 크지만 구매비율이 낮은 규칙은 신뢰도로 찾기 Lift가 1 이상인 규칙을 찾기

#-----------------------------------------------------# # Association Rule #-----------------------------------------------------# #Anaconda prompt에서 #pip install mlxtend #pip install D:/mlxtend-0.11.0-py2.py3-none-any.whl #-----------------------------------------------------# import mlxtend from mlxtend.frequent_patterns import apriori # 구식인 방법 from mlxtend.frequent_patterns import association_rules #1. 리스트 형태로 표현된 Transaction 처리 dataset = [['Milk', 'Cookie', 'Apple', 'Beans', 'Eggs', 'Yogurt'], ['Coke', 'Cookie', 'Apple', 'Beans', 'Eggs', 'Yogurt'], ['Milk', 'Apple', 'Kidney Beans', 'Eggs'], ['Milk', 'Orange', 'Corn', 'Beans', 'Yogurt'], ['Corn', 'Cookie', 'Cookie', 'Beans', 'Ice cream', 'Eggs']] type(dataset) import pandas as pd from mlxtend.preprocessing import TransactionEncoder te = TransactionEncoder() # 인코딩모델 te_ary = te.fit(dataset).transform(dataset) te_ary df = pd.DataFrame(te_ary, columns=te.columns_) df #apriori #입력: pandas DataFrame, min_support 기본값0.5, use_colnames 기본값 False, max_len 기본값 none apriori(df, min_support=0.6) apriori(df, min_support=0.6, use_colnames=True) frequent_itemsets = apriori(df, min_support=0.6, use_colnames=True) #필터링을 위해 length column 추가 frequent_itemsets['length'] = frequent_itemsets['itemsets'].apply(lambda x: len(x)) frequent_itemsets[ (frequent_itemsets['length'] == 2) & (frequent_itemsets['support'] >= 0.6) ]

2. Clustering 정의 : Cluster 의 개수나 구조에 관한 특별한 사전 가정없이, 개체들 사이의 유사성/ 거리에 근거해 cluster 를 찾고 다음 단계의 분석을 하게 하는 기법 원리 : 유사한 개체들을 cluster로 그룹화하여 각 집단의 성격을 파악 장점 데이터를 탐색하는 기법 (거들뿐... 이걸 의사결정에 이용하면 안됨) 추가적인 분석을 위해 사용할 수 있음 유사성, 비유사성만 계산할 수 있다면 여러 형태 데이터 적용 가능 분석 용이한 장점 단점 자료유형이 혼합된 경우, 거리 정의 등이 어려울 수 있음 (수치나 범주가 섞여있으면 못씀) 초기군집수 설정이 중요 결과해석에 주의 K-means clustering k개 : 주어진 cluster 개수 절차 : k개 만큼의 cluster seed 선택 (지정/임의로 선택 등) 각 개체들에 대해 cluster seed와 거리 계산하여, 가장 가까운 seed 에 개채 할당 각 개체가 seed 에 할당될 때마다 ,군집의 중심이 그 군집에 속하는 개체들의 평균 벡터로다시 계산 개체들을 가장 가까운 cluster seed에 재할당하고, 이 과정을 cluster

#------------------------------------------------------ #1 K-means 클러스터링 import numpy as np from sklearn import datasets np.random.seed(5) iris = datasets.load_iris() X = iris.data y = iris.target from sklearn.cluster import KMeans kmeans = KMeans(n_clusters=3) #n_clusters 클러스터의 개수, 기본은 8 #n_jobs 병렬 처리 개수 #algorithm: full(EM방식), elkan(효율적 방식), auto(dense 자료에 elkan, sparse에 full) #사용 함수 kmeans.fit(X) #클러스터링 kmeans.fit_predict(X) #클러스터 중심 계산 후 각 샘플의 클러스터를 예측, kmeans.labels_와 동일 kmeans.get_params() #파라미터 출력 kmeans.predict(X[0:5,]) #입력된 X값들이 어떤 클러스터에 속할 지 계산 kmeans.predict([[0, 0, 0, 0], [1,1,4, 4]]) kmeans.transform(X)[1,] #클러스터 중심으로부터의 거리로 변환된 값 X[1,] #결과 활용 kmeans.labels_ kmeans.cluster_centers_ kmeans.inertia_ #각 클러스터내에서 센터와 각 자료 사이 거리 합의 제곱

3. 그래프 : Graph mining

Graph ? Actors와 relations (또는 "nodes" and "edges")으로 구성 Graph 는 Node들의 연결에 대한 패턴에 대해 두가지 방법으로 표현 : graph & matrix 특히 graphics 는 "socio-grams" 으로 불리기도 함 수학자들은 "directed graphs" "signed graphs" or simply "graphs" 등으로 지칭

#---------------------------------------------------------- #networkx: import networkx as nx G = nx.Graph() G.nodes() #노드 확인 G.edges() #링크 확인 #node 추가 G.add_node(1) G.add_nodes_from([2,3]) H=nx.path_graph(10) #0~9의 노드를 갖는 그래프, 이어진 노드끼리 엣지 자동 생성 H.nodes() G.add_nodes_from(H) #H의 노드를 G에 추가 G.add_node(H) #H 그래프가 추가 #edge 추가 G.add_edge(1,2) e=(2,3) G.add_edge(*e) #*을 표시해야 tuple로 부터 엣지 생성:unpack G.add_edges_from([(1,2),(1,3)]) G.add_edges_from(H.edges()) #measure graph G.number_of_nodes() G.number_of_edges() G.neighbors(1) #node, edge 지우기: Graph.remove_node(), Graph.remove_nodes_from(), Graph.remove_edge(), Graph.remove_edges_from() G.remove_node(H) #H로 부터의 노드 지우기 G.clear() #모두 지우기 #---------------------------------------------------------- #example1 G.add_edges_from([(1,2),(1,3)]) G.add_node(1) G.add_edge(1,2) G.add_node("spam") # "spam" 노드가 추가 G.add_nodes_from("spam") # 문자열은 리스트이며, 각 문자가 값, 그래서's', 'p', 'a', 'm' 4개의 문자가 노드로 추가 #example2 G.remove_nodes_from("spam") G.nodes() G.remove_edge(1,3) #example3 H=nx.DiGraph(G) # create a DiGraph using the connections from G H.edges() edgelist=[(0,1),(1,2),(2,3)] H2=nx.Graph(edgelist)

추천 알고리즘 : Recommendation

Collaborative Filtering 협업 필터링 User-Based Collaborative Filtering 사용자 기반 협업 필터링 Item-Based Collaborative Filtering 아이템 기반 협업 필터링 ML 적용 사례들 미세먼지 VS 유동인구

++ 데이터 분석 TOPIC TEN

- 상반기 은행 실적

- 메타버스 활용 서비스 혁신

- 머지포인트 사태

- 마이 데이터

from http://re-b-iew.tistory.com/11 by ccl(A) rewrite - 2021-11-13 17:27:02