출처 : 생활코딩(https://opentutorials.org/course/4570)
import pandas as pd
# 파일들로부터 데이터 읽어오기
파일경로 = 'https://raw.githubusercontent.com/blackdew/tensorflow1/master/csv/lemonade.csv'
레몬에이드 = pd.read_csv(파일경로)
파일경로 = 'https://raw.githubusercontent.com/blackdew/tensorflow1/master/csv/boston.csv'
보스턴 = pd.read_csv(파일경로)
파일경로 = 'https://raw.githubusercontent.com/blackdew/tensorflow1/master/csv/iris.csv'
아이리스 = pd.read_csv(파일경로)
# 변수 안에 어떤 데이터가 들어있는지 확인 - 데이터 모양으로 확인하기 (행,열)
print(레몬에이드.shape)
print(보스턴.shape)
print(아이리스.shape)
# 칼럼 이름 출력
print(레몬에이드.columns)
print(보스턴.columns)
print(아이리스.columns)
# 독립변수와 종속변수를 분리하여 저장
x = 레몬에이드[['온도']]
y = 레몬에이드[['판매량']]
print(x.shape, y.shape)
x = 보스턴[['crim', 'zn', 'indus', 'chas', 'nox', 'rm', 'age', 'dis', 'rad', 'tax',
'ptratio', 'b', 'lstat']]
y = 보스턴[['medv']]
print(x.shape, y.shape)
x = 아이리스[['꽃잎길이', '꽃잎폭', '꽃받침길이', '꽃받침폭']]
y = 아이리스[['품종']]
print(x.shape, y.shape)
레몬에이드.head()
보스턴.head()
아이리스.head()
model.fit(독립, 종속, epochs = 10)
코드
#라이브러리 사용
import tensorflow as tf
import pandas as pd
#데이터 준비
파일경로 = 'https://raw.githubusercontent.com/blackdew/tensorflow1/master/csv/lemonade.csv'
data = pd.read_csv(파일경로)
data.head()
# 종속변수, 독립변수
x = data[['온도']]
y = data[['판매량']]
print(x.shape, y.shape)
#모델 만들기
X = tf.keras.layers.Input(shape=[1])
Y = tf.keras.layers.Dense(1)(X)
model = tf.keras.models.Model(X, Y)
model.compile(loss='mse')
#모델 학습
model.fit(x, y, epochs=10000, verbose=0) # 화면 출력을 off
model.fit(x, y, epochs=10)
# 모델을 이요하기
model.predict(x)
model.predict([[15]])
# 라이브러리 사용
import tensorflow as tf
import pandas as pd
# 과거의 데이터 준비
파일경로 = 'https://raw.githubusercontent.com/blackdew/tensorflow1/master/csv/boston.csv'
보스턴 = pd.read_csv(파일경로)
보스턴.head()
print(보스턴.columns)
# 모델의 구조 만듦
독립 = 보스턴[['crim', 'zn', 'indus', 'chas', 'nox', 'rm', 'age', 'dis', 'rad', 'tax',
'ptratio', 'b', 'lstat']]
종속 = 보스턴[['medv']]
print(독립.shape, 종속.shape)
x = tf.keras.layers.Input(shape=[13])
y = tf.keras.layers.Dense(1)(x)
model = tf.keras.models.Model(x,y)
model.compile(loss='mse')
# 데이터로 모델을 학습(FIT)
model.fit(독립, 종속, epochs=1000, verbose=0)
model.fit(독립, 종속, epochs=10, verbose=1)
# 모델을 이용
model.predict(독립[:5])
종속[0:5] #python의 슬라이싱(slicing)
# 모델의 수식 확인
model.get_weights()
원핫인코딩(onehot-encoding)
python 아이리스 = pd.get_dummies(아이리스)
-> 품종.setosa , 품종.virginica, 품종.versicolor...
소프트맥스 / cf. 시그모이드
비율을 예측하는데 사용 됨
softmax(함수 식) -> 결과 값을 0과 1 사이로 나오게 함
Indentity(y=x) 회귀모델
Softmax 분류모델
Activation 활성화 함수
categorical_crossentropy : mse(loss)를 계산하는 확률
metrics = 'accuracy' <- 0에서 1사이의 확률
코드
# 라이브러리 사용
import tensorflow as tf
import pandas as pd
# 과거 데이터 준비
파일경로 = 'https://raw.githubusercontent.com/blackdew/tensorflow1/master/csv/iris.csv'
아이리스 = pd.read_csv(파일경로)
아이리스.head()
# 모델 구조 만들기 / 원핫인코딩
인코딩 = pd.get_dummies(아이리스)
인코딩.head()
인코딩.columns
# 독립변수와 종속변수
독립 = 인코딩[['꽃잎길이', '꽃잎폭', '꽃받침길이', '꽃받침폭']]
종속 = 인코딩[['품종_setosa', '품종_versicolor',
'품종_virginica']]
print(독립.shape, 종속.shape)
# 모델 구조 생성
x = tf.keras.layers.Input(shape=[4])
y = tf.keras.layers.Dense(3, activation='softmax')(x)
model = tf.keras.models.Model(x,y)
model.compile(loss = 'categorical_crossentropy',
metrics='accuracy') # 사람이 보기 편한 정확도라는 척도
# 데이터로 모델을 학습 (FIT)
model.fit(독립, 종속, epochs=100)
# 모델 이용하기
model.predict(독립[0:5])
print(종속[0:5])
model.predict(독립[-5:])
print(종속[-5:])
# 학습한 가중치 출력
model.get_weights()
x = tf.keras.layers.Input(shape=[13])
H = tf.keras.layers.Dense(5, activation='swish')(x) # 히든 레이어 추가
y = tf.keras.layers.Dense(1)(H) # x가 아닌 H임을 주의
model = tf.keras.models.Model(x,y)
model.compile(loss='mse')
import tensorflow as tf
import pandas as pd
파일경로 = 'https://raw.githubusercontent.com/blackdew/tensorflow1/master/csv/iris2.csv'
아이리스 = pd.read_csv(파일경로)
아이리스.head()
# 원핫인코딩
인코딩 = pd.get_dummies(아이리스)
인코딩.head()
# 결과: 인코딩 되지 않음! -> 왜? 범주형이지만 숫자 데이터이기 때문에.
print(아이리스.dtypes)
# 품종 타입을 범주형으로 바꾸기
아이리스['품종'] = 아이리스['품종'].astype('category') # 아이리스의 품종 컬럼을 astype 함수로 '카테고리'로 바꿈
아이리스.dtypes
# 원핫인코딩
인코딩 = pd.get_dummies(아이리스)
인코딩.head()
# NA값 체크해보기
아이리스.isna().sum() # column 별로 na가 있는지 합을 보여줌
아이리스.tail()
# NA값에 꽃잎폭 평균값 넣어주기
mean = 아이리스['꽃잎폭'].mean()
아이리스['꽃잎폭'] = 아이리스['꽃잎폭'].fillna(mean)
아이리스.tail()
# 보스턴 집값 예측 데이터로 학습이 잘 되는 모델 만들기
- 사용할 레이어
- tf.keras.layers.BatchNomalization()
- tf.keras.layers.Activation('swish')
파일경로 = 'https://raw.githubusercontent.com/blackdew/tensorflow1/master/csv/boston.csv'
보스턴 = pd.read_csv(파일경로)
독립 = 보스턴[['crim', 'zn', 'indus', 'chas', 'nox', 'rm', 'age', 'dis', 'rad', 'tax',
'ptratio', 'b', 'lstat']]
종속 = 보스턴[['medv']]
print(독립.shape, 종속.shape)
# 모델의 구조 만들기
X = tf.keras.layers.Input(shape=[13])
H = tf.keras.layers.Dense(8, activation='swish')(X) # 히든 레이어 3층 만들기
H = tf.keras.layers.Dense(8, activation='swish')(H)
H = tf.keras.layers.Dense(8, activation='swish')(H)
Y = tf.keras.layers.Dense(1)(H)
model = tf.keras.models.Model(X, Y)
model.compile(loss='mse')
model.fit(독립, 종속, epochs=1000)
# 결과가 아주 만족스럽지는 않음
# BatchNormalization을 사용해 성능 높이기
X = tf.keras.layers.Input(shape=[13])
H = tf.keras.layers.Dense(8)(X)
H = tf.keras.layers.BatchNormalization()(H)
H = tf.keras.layers.Activation('swish')(H)
H = tf.keras.layers.Dense(8)(H)
H = tf.keras.layers.BatchNormalization()(H)
H = tf.keras.layers.Activation('swish')(H)
H = tf.keras.layers.Dense(8)(H)
H = tf.keras.layers.BatchNormalization()(H)
H = tf.keras.layers.Activation('swish')(H)
Y = tf.keras.layers.Dense(1)(H)
model = tf.keras.models.Model(X, Y)
model.compile(loss='mse')
model.fit(독립, 종속, epochs=1000, batch_size=150)
# loss가 10대 초반으로 떨어짐