<jupyter_start><jupyter_text>문제* 70% 데이터로 학습하고 30% 데이터에 대해 정확도를 알려 주세요* train_set            test_set<jupyter_code>def get_iris():
    # numpy는 모두 숫자이어야 해서
    # iris = np.loadtxt('Data/iris.csv')
    iris = np.loadtxt('Data/iris.csv',
                      skiprows=1,
                      delimiter=',')

    # "Setosa"     → 1,0,0
    # "Versicolor" → 0,1,0
    # ""  → 0,0,1

    # 앞쪽의 데이터 0부터~3이전까지
    print(iris[:3])
    # 마지막 자리부서 3개까지 앞으로
    print(iris[-3:])

    # 문제
    # iris를 피처(x)와 타겟(y)으로 구분하세요
    print(iris.shape)  #(150, 7)

    np.random.seed(1)
    np.random.shuffle(iris)

    x = iris[:, :4]
    print(x.shape)    # (150, 4)
    y = iris[:, 4:]
    print(y.shape)    # (150, 3)

# ---------------------------------------------------------

# 문제
# 70% 데이터로 학습하고 30% 데이터에 대해 정확도를 알려 주세요
# train_set            test_set
    train_size = int(len(x) * 0.7)

    x_train, x_test = x[:train_size], x[train_size:]
    y_train, y_test = y[:train_size], y[train_size:]

    print(x_train.shape, x_test.shape)
    print(y_train.shape, y_test.shape)

    return x_train, x_test, y_train, y_test
def sotfmax_regression_iris():
    x_train, x_test, y_train, y_test = get_iris()

    w = tf.Variable(tf.random_uniform([4, 3]))
    # bias는 class의 갯수만큼 정한다.
    b = tf.Variable(tf.random_uniform([3]))

    ph_x = tf.placeholder(tf.float32)

    # (105, 3) = (105, 4) @  (4, 3)
    z = tf.matmul(ph_x, w) + b
    hx = tf.nn.softmax(z)

    # tensorflow 2.0d에서 정리 될것,  logit=예측  label을 결과괌
    # logit에 z를 하는것은 hx를 전달하지 않아도 됨, 자체적으로 함
    # 우리의 결과는 ont-hot 백터가 아님으로  sparse_softmax_cross_entropy_with_logits
    loss_i = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=z, labels=y_train)
    loss = tf.reduce_mean(loss_i)

    optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.1)
    train = optimizer.minimize(loss=loss)

    # sess로 변수의 값을 알수 있다.
    sess = tf.Session()
    sess.run(tf.global_variables_initializer())

    for i in range(1000):
        sess.run(train, feed_dict={ph_x: x_train})
        print(i, sess.run(loss, {ph_x: x_train}))

    preds = sess.run(hx, {ph_x: x_test})
    preds_arg = np.argmax(preds, axis=1)  # 1: 수평, 0: 수직
    test_arg  = np.argmax(y_test, axis=1)

    # 파이썬의 list는 broadcasting기능이 없어서, numpy array로 변경
    # grades = np.array(['Setosa', 'Versicolor', 'Virginica'])
    # print(grades[preds_arg])
    # print(preds)

    # 1차 혼돈 : 데이터가 섞여 있지 않음으로 인한오류 → shuffle 필요 np.random.shuffle(iris)
    # 2차 혼돈 : 돌릴때 마다 위치가 달라져서 ...np.random.seed(1)
    print('acc: ', np.mean(preds_arg == test_arg))

    print(preds_arg)
    print(test_arg)

    sess.close()
sotfmax_regression_iris()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.16080777860882572, 'fraction_numerical': 0.02617801047120419, 'mean_word_length': 2.566666666666667, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '1', 'dir': 'jupyter-structured-clean-dedup', 'id': '410264', 'license': 'MIT', 'n_tokens_mistral': 1360, 'n_tokens_neox': 1395, 'n_words': 226, 'path': '_pages/AI/TensorFlow/src/NCIA-CNN/Day_01_03_softmax_iris.ipynb', 'repo_name': 'shpimit/shpimit.github.io', 'size': '2674'}