# import libraries 
import pandas as pd  
import numpy as np 
import matplotlib.pyplot as plt 
import random
import seaborn as sns
from fbprophet import Prophet

df = pd.read_csv('avocado.csv', index_col = 0)
df = df.sort_values(by='Date')

라이브러리와 데이터를 import 해준다. Prophet 분석을 위해 Date와 AveragePrice column만 가져와서 ds 와 y로 바꿔준다.

avocado_prophet_df = df[['Date', 'AveragePrice']]
avocado_prophet_df.columns = ['ds', 'y']

Prophet 객체를 만들고 기존의 데이터로 학습시킨뒤 예측하고자 하는 기간을 정해서 predict 함수에 대입한다.

prophet = Prophet()
prophet.fit(avocado_prophet_df)
future = prophet.make_future_dataframe(365)
forecast = prophet.predict(future)
prophet.plot(forecast)
plt.savefig('chart1.jpg')

prophet.plot_components(forecast)
plt.savefig('chart2.jpg')

WordCloud 에서 mask 파라미터에 이미지를 np.array로 변환해 대입하면 마스크 모양으로 나온다.

 

 

 

 

import numpy as np
import pandas as pd
import string
import nltk
nltk.download('stopwords')
from nltk.corpus import stopwords
my_stopwords = stopwords.words('english')

def message_cleaning(sentence):
    # 1. 구두점 제거
    Test_punc_removed = [char for char in sentence if char not in string.punctuation]
    # 2. 각 글자들을 하나의 문자열로 합친다.
    Test_punc_removed_join = ''.join(Test_punc_removed)
    # 3. 문자열에 불용어가 포함되어 있는지 확인해서, 불용어 제거한다.
    Test_punc_removed_join_clean = [word for word in Test_punc_removed_join.split() if word.lower() not in my_stopwords]
    # 4. 결과로 남은 단어들만 리턴한다.
    return Test_punc_removed_join_clean

from sklearn.feature_extraction.text import CountVectorizer
vec = CountVectorizer(analyzer = message_cleaning)

testing_sample = ['Hello, I am Ryan, I would like to book a hotel in Bali by January 24th', 'money viagara!!!!!']
X = vec.fit_transform(testing_sample)

X = X.toarray()
X

CountVectorizer를 import해주고 모델링 할 때 analyzer 파라미터에 문자열 전처리에 적용할 함수를 대입한다.

vec.fit_transform으로 대입한 문자열 데이터의 고유한 단어를 세서 각 개수를 Vectorize한다.

 

# 결과
[nltk_data] Downloading package stopwords to /root/nltk_data...
[nltk_data]   Package stopwords is already up-to-date!
array([[1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1],
       [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0]])

vec.transform에 새로운 문자열을 넣으면 이전에 계산한 고유한 단어들이 몇개 있는지 Vectorize한다.

new_date = ['Hello World!']
vec.transform(new_date).toarray()
# array([[0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]])

 

import string
import nltk
nltk.download('stopwords')
from nltk.corpus import stopwords
my_stopwords = stopwords.words('english') # 영어 불용어 가져온다

def message_cleaning(sentence):
    # 1. 구두점 제거
    Test_punc_removed = [char for char in sentence if char not in string.punctuation]
    # 2. 각 글자들을 하나의 문자열로 합친다.
    Test_punc_removed_join = ''.join(Test_punc_removed)
    # 3. 문자열에 불용어가 포함되어 있는지 확인해서, 불용어 제거한다.
    Test_punc_removed_join_clean = [word for word in Test_punc_removed_join.split() if word.lower() not in my_stopwords]
    # 4. 결과로 남은 단어들만 리턴한다.
    return Test_punc_removed_join_clean
    
message_cleaning('Hello~~! my name is, heheheh! nice to meet you!!!@')
# ['Hello', 'name', 'heheheh', 'nice', 'meet']

sentence에 문자열을 넣으면 먼저 문자열을 하나씩 char로 꺼내와서 char에 string.puctuation 안에 있는 기호가 들어잇는지 확인한다. 그리고 각 글자들을 하나의 문자열로 합친다.

split 함수를 통해 단어로 쪼갠 뒤 소문자 변환 한 것이 stopwords안에 있는지 확인하고 리턴한다.

 

Hyper Parameter 하이퍼 파라미터!! 사람이 설정해줘야 되는 값이고,  어떤값을 설정해야 똑똑한 인공지능이 나올지는 아무도 모른다.

param_grid 라는 변수에 딕셔너리로 파라미터 경우의 수를 대입하고 GridSearchCV모델을 만든다.

GridSearchCV.best_estimator_로 가장 좋은 조합을 가져오고 GridSearchCV.best_params_로 가장 좋은 모델에 사용된 하이퍼 파라미터를 가져온다.

프로젝트를 위해, 아나콘다 프롬프트를 실행하고, 다음을 인스톨 한다. conda install -c conda-forge wordcloud

데이터를 불러온다.

verified_reviews 를 하나의 리스트로 만들고 " " (공백) 으로 합쳐서, 하나의 문자열로 만듭니다.

WordCloud 를 이용하여, 화면에 많이 나온 단어들을 시각화 한다. STOPWORDS를 import한 뒤 집합에 불용어를 add함수로 추가한다.

 

라이브러리와 데이터를 불러온다.

제일 가까운 두점을 찾고 그 점의 중점을 한 점으로 치환한다. 또 그다음 제일 가까운 두 점을 찾고 계속 반복해나간다. 이런식으로 Dendrogram 을 그리고, 점 사이의 거리를 보면서 최적의 클러스터 갯수를 찾아보자. 

최적의 클러스터 갯수는 5개로 가정하고 모델링 후 예측한다.

 

k 개의 그룹을 만든다. 즉, 비슷한 특징을 갖는 것들끼리 묶는것, 다음을 두개, 세개, 네개 그룹 등등 원하는 그룹으로 만들 수 있다.

몇개로 분류할지는 어떻게 결정하는가? K의 갯수를 정하는 방법 

그룹의 중심점과 각 점간의 거리를 합한 것이 WCSS다

WCSS와 클러스터의 수를 시각화하여 꺽이는 지점을 클러스터 수로 정한다.

이것을 팔꿈치와 비슷하다 여거 Elbow Method라 이름지었다

먼저 데이터와 라이브러리를 불러온 뒤 전처리 해준다.

적절한 k 값(몇 개 그룹)을 찾기 위해서는 . WCSS값을 확인해야 한다! 따라서 K를 2부터 10까지 다 수행해 보고나서
WCSS 값을 확인해 본다. 이때, 엘보우 메소드를 이용해서, 최적의 K 값을 찾도록 한다.

이 때 최적의 k는 5라 가정하고 예측치를 데이터프레임에 대입하였다.

계속하여 이것인지 저것인지 그림처럼 결정한다.

라이브러리 임포트하고 데이터 전처리를 한다.

데이터 분리 후 모델링 하고 평가한다.

분류선에 가장 가까운 데이터들을, 가장 큰 마진(margin)으로 설정하는 선으로 결정하자.

분류선을 Maximum Margin Classifier라고 한다. SVM은 다른 머신러닝 알고리즘과 비교해서 무엇이 특별한가?

사과인지 오렌지인지 분석하는 문제에서 일반적인 사과와 오렌지들은, classifier에서 멀리 분포한다.

정상적이지 않은 것들, 즉 구분하기 힘든 부분에 있는 것들은 클래서파이어 근처에 있게 되며, 이 데이터들이 레이블링 되어 있으므로, Margin을 최대화 하여 분류하기 때문에, 특이한 것들까지 잘 분류하는 문제에 SVM 이 최고다.

데이터 전처리를 한뒤 모델링 후 평가한다.

+ Recent posts