Python으로 시작하는 빅데이터분석 및 인공지능 정오표(2020.08)

페이지	위치	수정 전(2쇄)	수정 후(3쇄)
70	(7)번 표	결과	결과 pha
86	3번째 표	결과 [0, 3, 4, 5]	결과 [0, 2, 3, 4, 5]
	10행	인덱스 1번과 2번의 값이 삭제된 것을 볼 수 있다.	인덱스 1번의 값만 삭제된 것을 볼 수 있다.
87	Quiz 5.13	명령문 a = [1, 2, 3] for i in a: print(i * 2, )	명령문 a = [1, 2, 3] for i in a: print(i * 2, )
89	5행	먼저 오름차순으로 정렬하려면 sort() 메소드를, 내림차순으로 정렬하려면 reverse() 메소드를 활용하면 된다.	먼저 오름차순으로 정렬하려면 sort() 메소드를 입력값 없이 사용하고, 내림차순으로 정렬하려면 reverse = True 옵션을 사용하면 된다.
	9행	다음은 내림차순으로 정렬하는 reverse()의 예를 살펴보자.	다음은 내림차순으로 정렬하는 예를 살펴보자.
	3번째 표	명령문 fruits = [‘사과’, ‘오렌지’, ‘포도’, ‘복숭아’] fruits.reverse() print(fruits) 결과 [‘복숭아’, ‘포도’, ‘오렌지’, ‘사과’]	명령문 nums = [3, 5, 2, 1, 5, 3] nums.sort(reverse = True) print(nums) 결과 [5, 5, 3, 3, 2, 1]
92	Quiz 5.16	명령문 def times2(a): for i in range( ) : = = * 2	명령문 def times2(a): for i in range( ) : = * 2
100	Quiz 5.17	명령문 pack = [(0, 0), (1, 1), (2, 4), (3, 9)]	명령문 pack = [(0, 0), (1, 1), (2, 4), (3, 9), (4, 16)]
106	(4)번 표	명령문 for name, num in ( ) : print(name, num)	명령문 for name, num in ( ) : print(name, ': ', num)
121	Quiz 6.6	명령문 def max_counts(text): skips = ['.', ',', ';', ':', ".", , ]	명령문 def max_counts(text): skips = ['.', ',', ';', ':', , ]
156	Quiz 9.9	bmi() 구하는 식 bmi = ((weight/height)**2)*100 명령문 bmi = weight / height ** 2 결과 [14.29102209 12.41723356 13.83317944 21.87665519 14.73015823]	bmi() 구하는 식 bmi = (weight/(height**2))*10000 명령문 bmi = weight / (height ** 2) * 10000 결과 [21.85171573 20.97505669 21.75028214 24.74734750 21.44127836]
	Quiz 9.10	결과 [False False False True False]	결과 [True False True True True]
157	3번째 표	명령문 np.linspace(0, 12, 4, endpoint=False) 결과 array([0., 3., 6., 9.])	명령문 np.linspace(0, 12, 3, endpoint=False) 결과 array([0., 4., 8.])
	6행	0에서 12까지 4개의 샘플(값)들을 얻어내는 코드인데 ‘endpoint=False'로 설정되어 있기 때문에 마지막 값을 제외하고 4개의 샘플값을 만들어내는 내용이다. 따라서 endpoint의 디폴트 값은 True이다.	0에서 12까지 3개의 등간격 값들을 얻어내는 코드인데 ‘endpoint=False'로 설정되어 있기 때문에 우선 4개의 구간으로 값을 나누고 마지막 값을 제외하여 출력한 결과이다. 그리고 endpoint의 디폴트 값은 True이다.
170	2번째 표	명령문 shape = np.pi * (np.random.rand(30)*20)**2 plt.scatter(x, y, s=shape, c=colors, marker='x', alpha=0.7)	명령문 size = np.pi * (np.random.rand(30)*20)**2 plt.scatter(x, y, s=size, c=colors, marker='x', alpha=0.7)
172	2번째 표	명령문 x=pd.Series([7, 3, 5, 8], index=[‘서울’, ‘대구’, ‘부산’, ‘광주’]) print(x) x[‘서울’] 결과 7	명령문 x=pd.Series([7, 3, 5, 8], index=[‘서울’, ‘대구’, ‘부산’, ‘광주’]) print(x) 결과 서울 7 대구 3 부산 5 광주 8 dtype: int64
173	5번째 표	명령문 x.reindex(sorted(x.index)) x 결과 서울 7 대구 3 부산 5 광주 8 dtype: int64	명령문 x=x.reindex(sorted(x.index)) x 결과 광주 8 대구 3 부산 5 서울 7 dtype: int64
222	2번째 표	명령문 time_2 = dt.datetime.today() time_2 - time_1	명령문 time2 = dt.datetime.today() time2 - time1
223	3번째 표	명령문 birdata.timestamp[1]-birdata.timestamp[0]	명령문 birdata['timestamp'] = pd.Series(timestamps, index = birdata.index) birdata.timestamp[1]-birdata.timestamp[0]
	6번째 표	명령문 birdata['timestamp'] = pd.Series(timestamps, index = birdata.index) birdata.head()	명령문 birdata.head()
227	2번째 표	결과 0.786002544525143	결과 0.6842385276730749
274	2번째 표	명령문 import numpy as np points = 500 vectors = [] for i in range(poin ts)	명령문 import numpy as np points = 500 vectors = [] for i in range(points)
275	2행	sess.run(train)과 plot을 15회 시도하면	sess.run(train)과 plot을 10회 시도하면
	5행	16번째부터 학습하게 되므로 올바른 변화를	11번째부터 학습하게 되므로 올바른 변화를
284	6행	learn.datasets.load_dataset('mnist')를 실행하면	(train_data, train_labels), (test_data, test_labels) = mnist.load_data()를 실행하면
	1번째 표 명령문 전체 교체	명령문 import numpy as np import matplotlib.pyplot as plt ...(중략)... print(test_labels)	명령문 import numpy as np from keras.utils import np_utils from tensorflow.keras.datasets import mnist (train_data, train_labels), (test_data, test_labels) = mnist.load_data() print(test_labels)
	9행	다운로드 시 상황을 화면에 상세하게 출력하는데, 에러에 관련된 내용만 출력하려면 다음과 같이 명령하면 된다. tf.logging.set_verbosity(tf.logging.ERROR)	(전체 삭제)
285	1행	에러뿐만 아니라 그밖에도 다음과 같은 내용들을 지정하여 출력할 수 있다. [DEBUG, INFO, WARN, FATAL]	(전체 삭제)
	1번째 표	명령문 max_examples = 10000 data = train_data[:max_examples] labels = train_labels[:max_examples] plt.imshow(test_data[0].reshape((28, 28)), cmap=plt.cm.YlOrBr) print('Index %d: Label %d' % (0, test_labels[0]))	명령문 import matplotlib.pyplot as plt max_examples = 10000 data = train_data[:max_examples] labels = train_labels[:max_examples] plt.imshow(test_data[0], cmap=plt.cm.YlOrBr) print('Index %d: Label %d' % (0, test_labels[0]))
	9행	그런데 여기에서 .reshape((28, 28))은 무엇을 의미하는 것일까?	(전체 삭제)
	11행	shape의 기능을 이용해보자. 출력 결과는 (784,)이다.	shape의 기능을 이용해보자. 출력 결과는 (28, 28)이다.
	2번째 표	결과 (784,)	결과 (28, 28)
	12행	바로 1차원 배열로 284개의 원소로 이루어진 것을 알 수 있다. 결론적으로 1개의 이미지는 284개의 데이터로 구성되어 있으며 이것은 가로 28, 세로 28의 픽셀로 이루어져 있다는 의미이다. 그런데 이것이 1차원 배열로 저장되어 있으므로 .reshape((28, 28))를 이용하여 (28x28)의 2차원 배열로 재배열한 것이다.	1개의 이미지는 (28, 28) 형식의 데이터로 구성되어 있으며 이것은 가로 28, 세로 28의 픽셀로 이루어져 있다는 의미이다.
286	표 결과 전체 교체	[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. ....(중략)... 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. ]	(전체 교체) => 내용이 많아 문서 끝에 별도로 작성함
287	5행	입력값을 파악하였으니 다음은 기계학습을 직접 수행해보자. 다음은 선형분류 모델을 이용하여 필기 숫자를 예측하는 프로그램이다 ~(중략)~ 최종적으로 값이 가장 높이 누적된 이미지의 출력이 결정되는 것이다.	입력값을 파악하였으니 다음은 기계학습을 직접 수행해보자. 다음은 케라스를 이용하여 딥러닝을 하는 모델이다.
	표 명령문/결과 전체 교체	명령문 input_features = learn.infer_real_valued_volumns_from_input(data) ...(중략)... print(test_labels[0]) 결과 0.9137 [7] 7	(전체 교체) => 내용이 많아 문서 끝에 별도로 작성함
288	1행	위의 예제는 7번 인덱스에 저장된 7의 글씨를 예측하는 프로그램으로 91.37%의 정확률을 확인할 수 있으며,	위의 예제에서는 97.61%의 정확률을 확인할 수 있으며,
	Quiz 16.1 전체 삭제	위의 프로그램을 수정하여 테스트 데이터의 인덱스 8에 저장된 내용을 출력하고 기계학습 후 예측 결과와 비교해보자. ...(표 생략)... (!) [6]은 예측한 결과이며 5는 실제 라벨이다. 결국 잘못된 예측 결과이지만 사람이 봐도 구분하기 힘든 글씨임을 알 수 있다.	(전체 삭제)
289	1번째 표 명령문 전체 교체	명령문 import numpy as np import matplotlib.pyplot as plt ...(중략)... data = train_data[:max_examples] labels = train_labels[:max_examples]	명령문 from keras.utils import np_utils from tensorflow.keras.datasets import mnist (train_data, train_labels), (test_data, test_labels) = mnist.load_data() width = 28 height = 28 train_data = train_data.reshape(60000, width*height).astype('float32') / 255.0 test_data = test_data.reshape(10000, width*height).astype('float32') / 255.0
	2번째 표	명령문 from sklearn import datasets, tree clf = tree.DecisionTreeClassifier() clf.fit(data, labels) ...(생략)... 결과 0.815	명령문 from sklearn import tree clf = tree.DecisionTreeClassifier() clf.fit(trains_data, trains_labels) ...(생략)... 결과 0.881
	3번째 표	명령문 ...(생략)... clf.fit(data, labels) ...(생략)... 결과 0.9467	명령문 ...(생략)... clf.fit(trains_data, trains_labels) ...(생략)... 결과 0.9688
290	1번째 표	명령문 from sklearn import datasets digits = datasets.load_digits() import random class myKNN(): def fit(self, X_train, y_train): self.X_train = X_train self.y_train = y_train def predict(self, X_test): predictions = [] for row in X_test: label = random.choice(self.y_train) prediction s.append(label) return predictions clf = myKNN() clf.fit(data, labels) ...(생략)... 결과 0.998	명령문 import random class myKNN(): def fit(self, train_data, train_labels): self.train_data = train_data self.train_labels = train_labels def predict(self, test_data): predictions = [] for row in test_data: label = random .choice(self.train_labels) predictions.append(label) return predictions clf = myKNN() clf.fit(trains_data, trains_labels) ...(생략)... 결과 0.1007
	2번째 표 명령문	class eucKNN(): def fit(self, X_train, y_train): self.X_train = X_train self.y_train = y_train def predict(self, X_test): predictions = [] for row in X_test: label = self.closest(row) predictions.append(label) return predictions def closest(self, row): best_dist = euc(rowm self.X_train[0]) best_index = 0 for i in range(1, len(self.X_train)): dist = euc(row, self.X_train[i]) if dist < best_dist: best_dist = dist best_index = i return self.y_train[best_index] clf = eucKNN() clf.fit(data, labels)	class eucKNN(): def fit(self, train_data, train_labels): self.train_data = train_data self.train_labels = train_labels def predict(self, test_data): predictions = [] for row in test_data: label = self.closest(row) predictions.append(label) return predictions def closest(self, row): best_dist = euc(row, self.train_data[0]) best_index = 0 for i in range(1, len(self.train_data)): dist = euc(row, self.train_data[i]) if dist < best_dist: best_dist = dist best_index = i return self.train_labels[best_index] clf = eucKNN() clf.fit(trains_data, trains_labels)
292	2번째 표	명령문 from sklearn import svm, datasets digits = datasets.load_digits() clf = svm.SVC(gamma=0.001, C=100.) clf.fit(data, labels) ...(생략)... 결과 0.9417	명령문 from sklearn import svm clf = svm.SVC(gamma=0.001, C=100.) clf.fit(trains_data, trains_labels) ...(생략)... 결과 0.973
	Quiz 16.2 ~ Quiz 16.5 전체 삭제	292쪽 Quiz 16.2부터 ~ 294쪽 Quiz 16.5까지	(전체 삭제)
290	1번째 표	명령문 def predict(self, X_test): predictions = [] for row in X_test: label = random.choice(self.y_train( prediction s.append(label) return predictions	명령문 def predict(self, X_test): predictions = [] for row in X_test: label = random.choice(self.y_train( predictions.append(label) return predictions

p. 286 (전체 교체)

[[ 0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0 ]

[ 0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0 ]

[ 0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0 ]

[ 0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0 ]

[ 0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0 ]

[ 0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0 ]

[ 0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0 ]

[ 0   0   0   0   0   0  84  185 159 151 60  36  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0 ]

[ 0   0   0   0   0   0 222 254 254 254 254 241 198 198 198 198 198 198 198 198 170 52 0   0   0   0   0   0 ]

... (중간생략)...

[ 0   0   0   0   0   0   0   0   0   0 121 254 207  18   0   0   0   0   0   0   0   0   0   0   0   0   0   0 ]

[ 0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0 ]]

p. 287 (전체 교체)

명령문

width = 28

height = 28

x_train = x_train.reshape(60000, width*height).astype('float32') / 255.0

x_test = x_test.reshape(10000, width*height).astype('float32') / 255.0

# < 데이터 전처리 : one-hot 인코딩 >

y_train = np_utils.to_categorical(y_train)

y_val = np_utils.to_categorical(y_train)

y_test = np_utils.to_categorical(y_test)

# < 모델 구성 >

model = Sequential()

model.add(Dense(256, input_dim=width*height, activation='relu'))

model.add(Dense(256, activation='relu'))

model.add(Dense(10, activation='softmax'))

# < 모델 설정 >

model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['acc'])

# < 모델 학습 >

hist = model.fit(x_train, y_train, epochs=20, batch_size=32)

model.evaluate(x_test, y_test, batch_size=32)

결과

10000/10000 [==============================] - 0s 34us/sample - loss: 0.0777 - acc: 0.9761

[0.07772079368103296, 0.9761]

* 텐서플로우 버전 2환경에서는 아래와 같이 실행! [p.275 하단] (빨간색:삽입, 파란색:수정)

명령문	import numpy as np points = 500 vectors = [] for i in range(points): x1= np.random.normal(0.0, 0.5) y1= x1 * 0.3 + 0.5 + np.random.normal(0.0, 0.05) vectors.append([x1, y1]) x_data = [v[0] for v in vectors] y_data = [v[1] for v in vectors]
	import tensorflow as tf import tensorflow.compat.v1 as tf tf.disable_v2_behavior() a = tf.Variable(tf.random.uniform([1], -1.0, 1.0)) b = tf.Variable(tf.zeros([1])) y = a * x_data + b loss = tf.reduce_mean(tf.square(y - y_data)) optimizer = tf.train.GradientDescentOptimizer(0.5) train = optimizer.minimize(loss) init = tf.global_variables_initializer() sess = tf.Session() sess.run(init)
	import matplotlib.pyplot as plt for step in range(10): sess.run(train) plt.plot(x_data, y_data, 'bo') plt.plot(x_data, sess.run(a) * x_data + sess.run(b)) plt.show()

출력결과