Phân loại nhị phân trong TensorFlow: Ví dụ về trình phân loại tuyến tính

Mục lục:

Anonim

Hai nhiệm vụ học tập có giám sát phổ biến nhất là hồi quy tuyến tính và phân loại tuyến tính. Hồi quy tuyến tính dự đoán một giá trị trong khi bộ phân loại tuyến tính dự đoán một lớp. Hướng dẫn này tập trung vào Bộ phân loại tuyến tính.

Bộ phân loại tuyến tính là gì?

Bộ phân loại tuyến tính trong Học máy là một phương pháp để tìm lớp của một đối tượng dựa trên các đặc điểm của nó để phân loại thống kê. Nó đưa ra quyết định phân loại dựa trên giá trị của sự kết hợp tuyến tính các đặc điểm của một đối tượng. Bộ phân loại tuyến tính được sử dụng trong các bài toán thực tế như phân loại tài liệu và các bài toán có nhiều biến.

Các vấn đề phân loại đại diện cho khoảng 80 phần trăm nhiệm vụ học máy. Phân loại nhằm mục đích dự đoán xác suất của mỗi lớp cho một tập hợp các yếu tố đầu vào. Nhãn (tức là, biến phụ thuộc) là một giá trị rời rạc, được gọi là một lớp.

  1. Nếu nhãn chỉ có hai lớp, thuật toán học là Bộ phân loại nhị phân.
  2. Bộ phân loại đa kính xử lý các nhãn có nhiều hơn hai lớp.

Ví dụ, một vấn đề phân loại nhị phân điển hình là dự đoán khả năng khách hàng mua hàng lần thứ hai. Dự đoán loại động vật hiển thị trên hình là bài toán phân loại đa lớp vì có hơn hai loại động vật tồn tại.

Phần lý thuyết của hướng dẫn này tập trung chính vào lớp nhị phân. Bạn sẽ tìm hiểu thêm về chức năng đầu ra đa thủy tinh trong một hướng dẫn trong tương lai.

Trong hướng dẫn này, bạn sẽ học

  • Bộ phân loại tuyến tính là gì?
  • Bộ phân loại nhị phân hoạt động như thế nào?
  • Làm thế nào để đo hiệu suất của Bộ phân loại tuyến tính?
  • Sự chính xác
  • Ma trận hỗn loạn
  • Độ chính xác và độ nhạy
  • Bộ phân loại tuyến tính với TensorFlow
  • Bước 1) Nhập dữ liệu
  • Bước 2) Chuyển đổi dữ liệu
  • Bước 3) Đào tạo bộ phân loại
  • Bước 4) Cải thiện mô hình
  • Bước 5) Siêu tham số: Lasso & Ridge

Bộ phân loại nhị phân hoạt động như thế nào?

Bạn đã biết trong hướng dẫn trước rằng một hàm bao gồm hai loại biến, một biến phụ thuộc và một tập hợp các tính năng (biến độc lập). Trong hồi quy tuyến tính, một biến phụ thuộc là một số thực không có phạm vi. Mục tiêu chính là dự đoán giá trị của nó bằng cách giảm thiểu sai số bình phương trung bình.

Đối với Bộ phân loại nhị phân TensorFlow, nhãn có thể có hai giá trị số nguyên khả dĩ. Trong hầu hết các trường hợp, nó là [0,1] hoặc [1,2]. Ví dụ, mục tiêu là dự đoán liệu khách hàng có mua một sản phẩm hay không. Nhãn được định nghĩa như sau:

  • Y = 1 (khách hàng đã mua sản phẩm)
  • Y = 0 (khách hàng không mua sản phẩm)

Mô hình sử dụng các đặc điểm X để phân loại từng khách hàng vào tầng lớp có khả năng họ thuộc về nhất, cụ thể là người mua tiềm năng hay không.

Xác suất thành công được tính bằng hồi quy logistic . Thuật toán sẽ tính toán xác suất dựa trên đặc điểm X và dự đoán thành công khi xác suất này trên 50 phần trăm. Chính thức hơn, xác suất được tính như trong ví dụ về Phân loại nhị phân TensorFlow dưới đây:

trong đó 0 là tập hợp các trọng số, các đặc trưng và b là độ chệch.

Hàm có thể được chia thành hai phần:

  • Mô hình tuyến tính
  • Chức năng hậu cần

Mô hình tuyến tính

Bạn đã quen với cách tính trọng số. Trọng số được tính bằng tích số chấm: Y là hàm tuyến tính của tất cả các đối tượng x i . Nếu mô hình không có tính năng, dự đoán bằng độ chệch, b.

Các trọng số cho biết hướng tương quan giữa các đối tượng địa lý x i và nhãn y. Mối tương quan dương làm tăng xác suất của lớp dương trong khi mối tương quan âm dẫn đến xác suất gần với 0, (tức là lớp âm).

Mô hình tuyến tính chỉ trả về số thực, không phù hợp với độ đo xác suất của phạm vi [0,1]. Cần có hàm logistic để chuyển đổi đầu ra của mô hình tuyến tính thành xác suất,

Chức năng hậu cần

Hàm logistic, hay hàm sigmoid, có hình chữ S và đầu ra của hàm này luôn nằm trong khoảng từ 0 đến 1.

Ví dụ về chức năng logistic

Có thể dễ dàng thay thế đầu ra của hồi quy tuyến tính thành hàm sigmoid. Nó dẫn đến một số mới với xác suất từ ​​0 đến 1.

Bộ phân loại có thể chuyển đổi xác suất thành một lớp

  • Giá trị từ 0 đến 0,49 trở thành loại 0
  • Giá trị từ 0,5 đến 1 trở thành loại 1

Làm thế nào để đo hiệu suất của Bộ phân loại tuyến tính?

Sự chính xác

Hiệu suất tổng thể của bộ phân loại được đo bằng chỉ số độ chính xác. Độ chính xác thu thập tất cả các giá trị chính xác chia cho tổng số lần quan sát. Ví dụ: giá trị độ chính xác là 80 phần trăm có nghĩa là mô hình đúng trong 80 phần trăm các trường hợp.

Đo lường hiệu suất của Bộ phân loại tuyến tính bằng cách sử dụng chỉ số Độ chính xác

Bạn có thể lưu ý một thiếu sót với số liệu này, đặc biệt là đối với lớp mất cân bằng. Tập dữ liệu mất cân bằng xảy ra khi số lượng quan sát trên mỗi nhóm không bằng nhau. Hãy cùng nói nào; bạn cố gắng phân loại một sự kiện hiếm với một chức năng hậu cần. Hãy tưởng tượng bộ phân loại cố gắng ước tính cái chết của một bệnh nhân sau một căn bệnh. Trong dữ liệu, 5% bệnh nhân qua đời. Bạn có thể đào tạo một người phân loại để dự đoán số người chết và sử dụng chỉ số độ chính xác để đánh giá các màn trình diễn. Nếu bộ phân loại dự đoán 0 tử vong cho toàn bộ tập dữ liệu, nó sẽ đúng trong 95% trường hợp.

Ma trận hỗn loạn

Một cách tốt hơn để đánh giá hiệu suất của bộ phân loại là xem xét ma trận nhầm lẫn.

Đo lường hiệu suất của Bộ phân loại tuyến tính bằng ma trận Lẫn lộn

Ma trận nhầm lẫn trực quan hóa độ chính xác của bộ phân loại bằng cách so sánh các lớp thực tế và các lớp được dự đoán như trong ví dụ về Bộ phân loại tuyến tính ở trên. Ma trận nhầm lẫn nhị phân bao gồm các ô vuông:

  • TP: True Positive: Giá trị được dự đoán được dự đoán chính xác là giá trị dương thực tế
  • FP: Giá trị được dự đoán dự đoán không chính xác về giá trị dương thực tế. tức là, các giá trị âm được dự đoán là dương
  • FN: Sai Phủ định: Giá trị dương được dự đoán là âm
  • TN: True Negative: Giá trị được dự đoán được dự đoán chính xác là âm thực tế

Từ ma trận nhầm lẫn, có thể dễ dàng so sánh lớp thực tế và lớp dự đoán.

Độ chính xác và độ nhạy

Ma trận nhầm lẫn cung cấp một cái nhìn sâu sắc về tích cực thực sự và tích cực sai. Trong một số trường hợp, tốt hơn là có một số liệu ngắn gọn hơn.

Độ chính xác

Chỉ số độ chính xác cho thấy độ chính xác của lớp tích cực. Nó đo lường khả năng dự đoán của lớp tích cực là đúng.

Điểm tối đa là 1 khi trình phân loại phân loại hoàn hảo tất cả các giá trị dương. Độ chính xác một mình không hữu ích lắm vì nó bỏ qua lớp phủ định. Chỉ số này thường được ghép nối với chỉ số Nhớ lại. Thu hồi còn được gọi là độ nhạy hoặc tỷ lệ dương tính thực sự.

Nhạy cảm

Độ nhạy tính toán tỷ lệ các lớp tích cực được phát hiện một cách chính xác. Số liệu này cho biết mức độ tốt của mô hình để nhận ra một lớp tích cực.

Bộ phân loại tuyến tính với TensorFlow

Đối với hướng dẫn này, chúng tôi sẽ sử dụng tập dữ liệu điều tra dân số. Mục đích là sử dụng các biến trong tập dữ liệu điều tra dân số để dự đoán mức thu nhập. Lưu ý rằng thu nhập là một biến nhị phân

  • với giá trị là 1 nếu thu nhập> 50k
  • 0 nếu thu nhập <50k.

Biến này là nhãn của bạn

Tập dữ liệu này bao gồm tám biến phân loại:

  • nơi làm việc
  • giáo dục
  • hôn nhân
  • nghề nghiệp
  • mối quan hệ
  • cuộc đua
  • tình dục
  • quê hương

hơn nữa, sáu biến liên tục:

  • tuổi tác
  • fnlwgt
  • giáo dục_num
  • tăng vốn
  • capital_loss
  • giờ_ tuần

Thông qua ví dụ về Phân loại TensorFlow này, bạn sẽ hiểu cách đào tạo Bộ phân loại TensorFlow tuyến tính với công cụ ước tính TensorFlow và cách cải thiện chỉ số độ chính xác.

Chúng tôi sẽ tiến hành như sau:

  • Bước 1) Nhập dữ liệu
  • Bước 2) Chuyển đổi dữ liệu
  • Bước 3) Đào tạo trình phân loại
  • Bước 4) Cải thiện mô hình
  • Bước 5) Siêu tham số: Lasso & Ridge

Bước 1) Nhập dữ liệu

Trước tiên, bạn nhập các thư viện được sử dụng trong hướng dẫn.

import tensorflow as tfimport pandas as pd 

Tiếp theo, bạn nhập dữ liệu từ kho lưu trữ của UCI và xác định tên các cột. Bạn sẽ sử dụng CỘT để đặt tên cho các cột trong khung dữ liệu gấu trúc.

Lưu ý rằng bạn sẽ đào tạo trình phân loại bằng cách sử dụng khung dữ liệu Pandas.

## Define path dataCOLUMNS = ['age','workclass', 'fnlwgt', 'education', 'education_num', 'marital','occupation', 'relationship', 'race', 'sex', 'capital_gain', 'capital_loss','hours_week', 'native_country', 'label']PATH = "https://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.data"PATH_test = "https://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.test"

Dữ liệu được lưu trữ trực tuyến đã được phân chia giữa tập hợp tàu và tập thử nghiệm.

df_train = pd.read_csv(PATH, skipinitialspace=True, names = COLUMNS, index_col=False)df_test = pd.read_csv(PATH_test,skiprows = 1, skipinitialspace=True, names = COLUMNS, index_col=False)

Tập hợp xe lửa chứa 32.561 quan sát và tập kiểm tra 16.281

print(df_train.shape, df_test.shape)print(df_train.dtypes)(32561, 15) (16281, 15)age int64workclass objectfnlwgt int64education objecteducation_num int64marital objectoccupation objectrelationship objectrace objectsex objectcapital_gain int64capital_loss int64hours_week int64native_country objectlabel objectdtype: object

Tensorflow yêu cầu giá trị Boolean để đào tạo bộ phân loại. Bạn cần truyền các giá trị từ chuỗi sang số nguyên. Nhãn được lưu trữ dưới dạng một đối tượng, tuy nhiên, bạn cần chuyển nó thành một giá trị số. Đoạn mã dưới đây tạo một từ điển với các giá trị để chuyển đổi và lặp qua mục cột. Lưu ý rằng bạn thực hiện thao tác này hai lần, một cho bài kiểm tra tàu, một cho bộ kiểm tra

label = {'<=50K': 0,'>50K': 1}df_train.label = [label[item] for item in df_train.label]label_t = {'<=50K.': 0,'>50K.': 1}df_test.label = [label_t[item] for item in df_test.label]

Trong dữ liệu tàu, có 24.720 thu nhập thấp hơn 50k và 7841 thu nhập ở trên. Tỷ lệ gần như giống nhau đối với bộ thử nghiệm. Vui lòng tham khảo hướng dẫn này trên Các khía cạnh để biết thêm.

print(df_train["label"].value_counts())### The model will be correct in atleast 70% of the caseprint(df_test["label"].value_counts())## Unbalanced labelprint(df_train.dtypes)0 247201 7841Name: label, dtype: int640 124351 3846Name: label, dtype: int64age int64workclass objectfnlwgt int64education objecteducation_num int64marital objectoccupation objectrelationship objectrace objectsex objectcapital_gain int64capital_loss int64hours_week int64native_country objectlabel int64dtype: object

Bước 2) Chuyển đổi dữ liệu

Bạn cần thực hiện một vài bước trước khi đào tạo bộ phân loại tuyến tính với Tensorflow. Bạn cần chuẩn bị các tính năng để đưa vào mô hình. Trong hồi quy điểm chuẩn, bạn sẽ sử dụng dữ liệu gốc mà không áp dụng bất kỳ biến đổi nào.

Người ước lượng cần có một danh sách các tính năng để huấn luyện mô hình. Do đó, dữ liệu của cột yêu cầu được chuyển đổi thành tensor.

Một phương pháp hay là xác định hai danh sách các đối tượng địa lý dựa trên loại của chúng và sau đó chuyển chúng vào các cột_đặc_hí của công cụ ước tính.

Bạn sẽ bắt đầu bằng cách chuyển đổi các tính năng liên tục, sau đó xác định một nhóm với dữ liệu phân loại.

Các tính năng của tập dữ liệu có hai định dạng:

  • Số nguyên
  • Vật

Mỗi đối tượng địa lý được liệt kê trong hai biến tiếp theo tùy theo loại của chúng.

## Add features to the bucket:### Define continuous listCONTI_FEATURES = ['age', 'fnlwgt','capital_gain', 'education_num', 'capital_loss', 'hours_week']### Define the categorical listCATE_FEATURES = ['workclass', 'education', 'marital', 'occupation', 'relationship', 'race', 'sex', 'native_country']

Feature_column được trang bị một object numeric_column để giúp chuyển đổi các biến liên tục thành tensor. Trong đoạn mã dưới đây, bạn chuyển đổi tất cả các biến từ CONTI_FEATURES thành một tensor có giá trị số. Đây là điều bắt buộc để xây dựng mô hình. Tất cả các biến độc lập cần được chuyển đổi thành kiểu tensor thích hợp.

Dưới đây, chúng tôi viết mã để cho bạn biết điều gì đang xảy ra đằng sau feature_column.numeric_column. Chúng tôi sẽ in giá trị đã chuyển đổi cho age Nó nhằm mục đích giải thích, do đó không cần hiểu mã python. Bạn có thể tham khảo tài liệu chính thức để hiểu các mã.

def print_transformation(feature = "age", continuous = True, size = 2):#X = fc.numeric_column(feature)## Create feature namefeature_names = [feature]## Create dict with the datad = dict(zip(feature_names, [df_train[feature]]))## Convert ageif continuous == True:c = tf.feature_column.numeric_column(feature)feature_columns = [c]else:c = tf.feature_column.categorical_column_with_hash_bucket(feature, hash_bucket_size=size)c_indicator = tf.feature_column.indicator_column(c)feature_columns = [c_indicator]## Use input_layer to print the valueinput_layer = tf.feature_column.input_layer(features=d,feature_columns=feature_columns)## Create lookup tablezero = tf.constant(0, dtype=tf.float32)where = tf.not_equal(input_layer, zero)## Return lookup tbleindices = tf.where(where)values = tf.gather_nd(input_layer, indices)## Initiate graphsess = tf.Session()## Print valueprint(sess.run(input_layer))print_transformation(feature = "age", continuous = True)[[39.][50.][38.]… [58.][22.][52.]]

Các giá trị hoàn toàn giống như trong df_train

continuous_features = [tf.feature_column.numeric_column(k) for k in CONTI_FEATURES] 

Theo tài liệu TensorFlow, có nhiều cách khác nhau để chuyển đổi dữ liệu phân loại. Nếu danh sách từ vựng của một đối tượng địa lý đã biết và không có nhiều giá trị, bạn có thể tạo cột phân loại với categorical_column_with_vocabulary_list. Nó sẽ gán cho tất cả danh sách từ vựng duy nhất một ID.

Ví dụ: nếu một trạng thái biến có ba giá trị khác nhau:

  • Người chồng
  • Người vợ
  • Độc thân

Sau đó, ba ID sẽ được quy. Ví dụ, Chồng sẽ có ID 1, Vợ có ID 2, v.v.

Với mục đích minh họa, bạn có thể sử dụng mã này để chuyển đổi một biến đối tượng thành một cột phân loại trong TensorFlow.

Giới tính đối tượng chỉ có thể có hai giá trị: nam hoặc nữ. Khi chúng tôi chuyển đổi giới tính đối tượng, Tensorflow sẽ tạo 2 cột mới, một cột dành cho nam và một cột dành cho nữ. Nếu giới tính bằng nam thì cột mới nam sẽ bằng 1 và nữ bằng 0. Ví dụ này được hiển thị trong bảng dưới đây:

hàng

tình dục

sau khi biến đổi

Nam giới

giống cái

1

Nam giới

=>

1

0

2

Nam giới

=>

1

0

3

giống cái

=>

0

1

Trong dòng chảy căng thẳng:

print_transformation(feature = "sex", continuous = False, size = 2)[[1. 0.][1. 0.][1. 0.]… [0. 1.][1. 0.][0. 1.]]relationship = tf.feature_column.categorical_column_with_vocabulary_list('relationship', ['Husband', 'Not-in-family', 'Wife', 'Own-child', 'Unmarried','Other-relative'])

Dưới đây, chúng tôi đã thêm mã Python để in mã hóa. Một lần nữa, bạn không cần phải hiểu mã, mục đích là để xem sự biến đổi

Tuy nhiên, một cách nhanh hơn để chuyển đổi dữ liệu là sử dụng phương thức categorical_column_with_hash_bucket. Việc thay đổi các biến chuỗi trong một ma trận thưa thớt sẽ rất hữu ích. Ma trận thưa thớt là ma trận có phần lớn là 0. Phương pháp chăm sóc tất cả mọi thứ. Bạn chỉ cần xác định số lượng nhóm và cột khóa. Số lượng nhóm là số lượng nhóm tối đa mà Tensorflow có thể tạo. Cột quan trọng chỉ đơn giản là tên của cột cần chuyển đổi.

Trong đoạn mã dưới đây, bạn tạo một vòng lặp trên tất cả các đối tượng địa lý phân loại.

categorical_features = [tf.feature_column.categorical_column_with_hash_bucket(k, hash_bucket_size=1000) for k in CATE_FEATURES]

Bước 3) Đào tạo bộ phân loại

TensorFlow hiện cung cấp một công cụ ước lượng cho hồi quy tuyến tính và phân loại tuyến tính.

  • Hồi quy tuyến tính: LinearRegressor
  • Phân loại tuyến tính: LinearClassifier

Cú pháp của bộ phân loại tuyến tính giống như trong hướng dẫn về hồi quy tuyến tính ngoại trừ một đối số, n_class. Bạn cần xác định cột đặc trưng, ​​thư mục mô hình và so sánh với công cụ hồi quy tuyến tính; bạn có xác định số lượng lớp. Đối với hồi quy logit, số lớp của nó bằng 2.

Mô hình sẽ tính toán trọng số của các cột chứa trong liên tục và phân loại.

model = tf.estimator.LinearClassifier(n_classes = 2,model_dir="ongoing/train",feature_columns=categorical_features+ continuous_features)

ĐẦU RA:

INFO:tensorflow:Using default config.INFO:tensorflow:Using config: {'_model_dir': 'ongoing/train', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': None, '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': None, '_service': None, '_cluster_spec':, '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': '', '_evaluation_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1}

Bây giờ bộ phân loại đã được xác định, bạn có thể tạo hàm đầu vào. Phương pháp này giống như trong hướng dẫn hồi quy tuyến tính. Ở đây, bạn sử dụng kích thước lô là 128 và bạn xáo trộn dữ liệu.

FEATURES = ['age','workclass', 'fnlwgt', 'education', 'education_num', 'marital', 'occupation', 'relationship', 'race', 'sex', 'capital_gain', 'capital_loss', 'hours_week', 'native_country']LABEL= 'label'def get_input_fn(data_set, num_epochs=None, n_batch = 128, shuffle=True):return tf.estimator.inputs.pandas_input_fn(x=pd.DataFrame({k: data_set[k].values for k in FEATURES}),y = pd.Series(data_set[LABEL].values),batch_size=n_batch,num_epochs=num_epochs,shuffle=shuffle)

Bạn tạo một hàm với các đối số được yêu cầu bởi công cụ ước lượng tuyến tính, tức là số kỷ nguyên, số lô và xáo trộn tập dữ liệu hoặc ghi chú. Vì bạn sử dụng phương pháp Pandas để truyền dữ liệu vào mô hình, bạn cần xác định các biến X làm khung dữ liệu gấu trúc. Lưu ý rằng bạn lặp lại tất cả dữ liệu được lưu trữ trong FEATURES.

Hãy huấn luyện mô hình với object model.train. Bạn sử dụng chức năng đã xác định trước đó để cung cấp cho mô hình các giá trị thích hợp. Lưu ý rằng bạn đặt kích thước lô thành 128 và số kỷ nguyên thành Không. Mô hình sẽ được đào tạo trên một nghìn bước.

model.train(input_fn=get_input_fn(df_train,num_epochs=None,n_batch = 128,shuffle=False),steps=1000)
INFO:tensorflow:Calling model_fn.INFO:tensorflow:Done calling model_fn.INFO:tensorflow:Create CheckpointSaverHook.INFO:tensorflow: Graph was finalized.INFO:tensorflow:Running local_init_op.INFO:tensorflow:Done running local_init_op.INFO:tensorflow:Saving checkpoints for 1 into ongoing/train/model.ckpt.INFO:tensorflow:loss = 88.722855, step = 1INFO:tensorflow:global_step/sec: 65.8282INFO:tensorflow:loss = 52583.64, step = 101 (1.528 sec)INFO:tensorflow:global_step/sec: 118.386INFO:tensorflow:loss = 25203.816, step = 201 (0.837 sec)INFO:tensorflow:global_step/sec: 110.542INFO:tensorflow:loss = 54924.312, step = 301 (0.905 sec)INFO:tensorflow:global_step/sec: 199.03INFO:tensorflow:loss = 68509.31, step = 401 (0.502 sec)INFO:tensorflow:global_step/sec: 167.488INFO:tensorflow:loss = 9151.754, step = 501 (0.599 sec)INFO:tensorflow:global_step/sec: 220.155INFO:tensorflow:loss = 34576.06, step = 601 (0.453 sec)INFO:tensorflow:global_step/sec: 199.016INFO:tensorflow:loss = 36047.117, step = 701 (0.503 sec)INFO:tensorflow:global_step/sec: 197.531INFO:tensorflow:loss = 22608.148, step = 801 (0.505 sec)INFO:tensorflow:global_step/sec: 208.479INFO:tensorflow:loss = 22201.918, step = 901 (0.479 sec)INFO:tensorflow:Saving checkpoints for 1000 into ongoing/train/model.ckpt.INFO:tensorflow:Loss for final step: 5444.363.

Lưu ý rằng tổn thất đã giảm sau đó trong 100 bước cuối cùng, tức là từ 901 xuống 1000.

Tổn thất cuối cùng sau một nghìn lần lặp là 5444. Bạn có thể ước tính mô hình của mình trên bộ thử nghiệm và xem hiệu suất. Để đánh giá hiệu suất của mô hình của bạn, bạn cần sử dụng đánh giá đối tượng. Bạn cấp nguồn cho mô hình với bộ thử nghiệm và đặt số kỷ nguyên thành 1, tức là dữ liệu sẽ chuyển đến mô hình một lần duy nhất.

model.evaluate(input_fn=get_input_fn(df_test,num_epochs=1,n_batch = 128,shuffle=False),steps=1000)
INFO:tensorflow:Calling model_fn.WARNING:tensorflow:Trapezoidal rule is known to produce incorrect PR-AUCs; please switch to "careful_interpolation" instead.WARNING:tensorflow:Trapezoidal rule is known to produce incorrect PR-AUCs; please switch to "careful_interpolation" instead.INFO:tensorflow:Done calling model_fn.INFO:tensorflow:Starting evaluation at 2018-06-02-08:28:22INFO:tensorflow:Graph was finalized.INFO:tensorflow:Restoring parameters from ongoing/train/model.ckpt-1000INFO:tensorflow:Running local_init_op.INFO:tensorflow:Done running local_init_op.INFO:tensorflow:Evaluation [100/1000]INFO:tensorflow:Finished evaluation at 2018-06-02-08:28:23INFO:tensorflow:Saving dict for global step 1000: accuracy = 0.7615626, accuracy_baseline = 0.76377374, auc = 0.63300294, auc_precision_recall = 0.50891197, average_loss = 47.12155, global_step = 1000, label/mean = 0.23622628, loss = 5993.6406, precision = 0.49401596, prediction/mean = 0.18454961, recall = 0.38637546{'accuracy': 0.7615626,'accuracy_baseline': 0.76377374,'auc': 0.63300294,'auc_precision_recall': 0.50891197,'average_loss': 47.12155,'global_step': 1000,'label/mean': 0.23622628,'loss': 5993.6406,'precision': 0.49401596,'prediction/mean': 0.18454961,'recall': 0.38637546}

TensorFlow trả về tất cả các số liệu bạn đã học trong phần lý thuyết. Không có gì ngạc nhiên, độ chính xác lớn do nhãn không cân bằng. Trên thực tế, mô hình hoạt động tốt hơn một chút so với phỏng đoán ngẫu nhiên. Hãy tưởng tượng mô hình dự đoán tất cả các hộ gia đình có thu nhập thấp hơn 50 nghìn, khi đó mô hình có độ chính xác là 70%. Khi phân tích kỹ hơn, bạn có thể thấy dự đoán và thu hồi là khá thấp.

Bước 4) Cải thiện mô hình

Bây giờ bạn đã có một mô hình điểm chuẩn, bạn có thể cố gắng cải thiện nó, tức là tăng độ chính xác. Trong hướng dẫn trước, bạn đã học cách cải thiện sức mạnh dự đoán với một thuật ngữ tương tác. Trong hướng dẫn này, bạn sẽ xem lại ý tưởng này bằng cách thêm một thuật ngữ đa thức vào hồi quy.

Hồi quy đa thức là công cụ khi có sự không tuyến tính trong dữ liệu. Có hai cách để nắm bắt tính không tuyến tính trong dữ liệu.

  • Thêm số hạng đa thức
  • Bucke hóa biến liên tục thành một biến phân loại

Thuật ngữ đa thức

Từ hình bên dưới, bạn có thể thấy hồi quy đa thức là gì. Nó là một phương trình với X biến với sức mạnh khác nhau. Hồi quy đa thức bậc hai có hai biến, X và X bình phương. Mức độ thứ ba có ba biến, X, X 2 và X 3

Hồi quy đa thức là gì

Dưới đây, chúng tôi đã xây dựng một đồ thị với hai biến, X và Y. Rõ ràng là mối quan hệ không phải là tuyến tính. Nếu chúng ta thêm một hồi quy tuyến tính, chúng ta có thể thấy mô hình không thể nắm bắt được mô hình (hình bên trái).

Bây giờ, hãy nhìn vào hình bên trái từ hình bên dưới, chúng tôi đã thêm năm số hạng vào hồi quy (đó là y = x + x 2 + x 3 + x 4 + x 5. Mô hình hiện nắm bắt tốt hơn mô hình này. Đây là lũy thừa của hồi quy đa thức.

Hãy quay lại ví dụ của chúng ta. Tuổi tác không nằm trong mối quan hệ tuyến tính với thu nhập. Thu nhập sớm có thể gần bằng 0 vì trẻ em hoặc thanh niên không đi làm. Sau đó, nó tăng lên trong độ tuổi lao động và giảm khi nghỉ hưu. Nó thường là hình chữ U đảo ngược. Một cách để nắm bắt mô hình này là thêm lũy thừa hai vào hồi quy.

Hãy xem nó có làm tăng độ chính xác không.

Bạn cần thêm tính năng mới này vào tập dữ liệu và trong danh sách tính năng liên tục.

Bạn thêm biến mới trong tập dữ liệu huấn luyện và kiểm tra, vì vậy việc viết một hàm sẽ thuận tiện hơn.

def square_var(df_t, df_te, var_name = 'age'):df_t['new'] = df_t[var_name].pow(2)df_te['new'] = df_te[var_name].pow(2)return df_t, df_te

Hàm có 3 đối số:

  • df_t: xác định tập huấn luyện
  • df_te: xác định bộ kiểm tra
  • var_name = 'age': Xác định biến để chuyển đổi

Bạn có thể sử dụng đối tượng pow (2) để bình phương độ tuổi của biến. Lưu ý rằng biến mới được đặt tên là 'mới'

Bây giờ hàm square_var đã được viết, bạn có thể tạo tập dữ liệu mới.

df_train_new, df_test_new = square_var(df_train, df_test, var_name = 'age') 

Như bạn có thể thấy, tập dữ liệu mới có thêm một tính năng.

print(df_train_new.shape, df_test_new.shape)(32561, 16) (16281, 16) 

Biến bình phương được gọi là mới trong tập dữ liệu. Bạn cần thêm nó vào danh sách các tính năng liên tục.

CONTI_FEATURES_NEW = ['age', 'fnlwgt','capital_gain', 'education_num', 'capital_loss', 'hours_week', 'new']continuous_features_new = [tf.feature_column.numeric_column(k) for k in CONTI_FEATURES_NEW]

Lưu ý rằng bạn đã thay đổi thư mục của Biểu đồ. Bạn không thể đào tạo các mô hình khác nhau trong cùng một thư mục. Có nghĩa là, bạn cần thay đổi đường dẫn của đối số model_dir. Nếu bạn không, TensorFlow sẽ báo lỗi.

model_1 = tf.estimator.LinearClassifier(model_dir="ongoing/train1",feature_columns=categorical_features+ continuous_features_new)
INFO:tensorflow:Using default config.INFO:tensorflow:Using config: {'_model_dir': 'ongoing/train1', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': None, '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': None, '_service': None, '_cluster_spec':, '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': '', '_evaluation_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1}FEATURES_NEW = ['age','workclass', 'fnlwgt', 'education', 'education_num', 'marital', 'occupation', 'relationship', 'race', 'sex', 'capital_gain', 'capital_loss', 'hours_week', 'native_country', 'new']def get_input_fn(data_set, num_epochs=None, n_batch = 128, shuffle=True):return tf.estimator.inputs.pandas_input_fn(x=pd.DataFrame({k: data_set[k].values for k in FEATURES_NEW}),y = pd.Series(data_set[LABEL].values),batch_size=n_batch,num_epochs=num_epochs,shuffle=shuffle)

Bây giờ bộ phân loại được thiết kế với tập dữ liệu mới, bạn có thể đào tạo và đánh giá mô hình.

model_1.train(input_fn=get_input_fn(df_train,num_epochs=None,n_batch = 128,shuffle=False),steps=1000)
INFO:tensorflow:Calling model_fn.INFO:tensorflow:Done calling model_fn.INFO:tensorflow:Create CheckpointSaverHook.INFO:tensorflow:Graph was finalized.INFO:tensorflow:Running local_init_op.INFO:tensorflow:Done running local_init_op.INFO:tensorflow:Saving checkpoints for 1 into ongoing/train1/model.ckpt.INFO:tensorflow:loss = 88.722855, step = 1INFO:tensorflow:global_step/sec: 81.487INFO:tensorflow:loss = 70077.66, step = 101 (1.228 sec)INFO:tensorflow:global_step/sec: 111.169INFO:tensorflow:loss = 49522.082, step = 201 (0.899 sec)INFO:tensorflow:global_step/sec: 128.91INFO:tensorflow:loss = 107120.57, step = 301 (0.776 sec)INFO:tensorflow:global_step/sec: 132.546INFO:tensorflow:loss = 12814.152, step = 401 (0.755 sec)INFO:tensorflow:global_step/sec: 162.194INFO:tensorflow:loss = 19573.898, step = 501 (0.617 sec)INFO:tensorflow:global_step/sec: 204.852INFO:tensorflow:loss = 26381.986, step = 601 (0.488 sec)INFO:tensorflow:global_step/sec: 188.923INFO:tensorflow:loss = 23417.719, step = 701 (0.529 sec)INFO:tensorflow:global_step/sec: 192.041INFO:tensorflow:loss = 23946.049, step = 801 (0.521 sec)INFO:tensorflow:global_step/sec: 197.025INFO:tensorflow:loss = 3309.5786, step = 901 (0.507 sec)INFO:tensorflow:Saving checkpoints for 1000 into ongoing/train1/model.ckpt.INFO:tensorflow:Loss for final step: 28861.898.
model_1.evaluate(input_fn=get_input_fn(df_test_new,num_epochs=1,n_batch = 128,shuffle=False),steps=1000)
INFO:tensorflow:Calling model_fn.WARNING:tensorflow:Trapezoidal rule is known to produce incorrect PR-AUCs; please switch to "careful_interpolation" instead.WARNING:tensorflow:Trapezoidal rule is known to produce incorrect PR-AUCs; please switch to "careful_interpolation" instead.INFO:tensorflow:Done calling model_fn.INFO:tensorflow:Starting evaluation at 2018-06-02-08:28:37INFO:tensorflow:Graph was finalized.INFO:tensorflow:Restoring parameters from ongoing/train1/model.ckpt-1000INFO:tensorflow:Running local_init_op.INFO:tensorflow:Done running local_init_op.INFO:tensorflow:Evaluation [100/1000]INFO:tensorflow:Finished evaluation at 2018-06-02-08:28:39INFO:tensorflow:Saving dict for global step 1000: accuracy = 0.7944229, accuracy_baseline = 0.76377374, auc = 0.6093755, auc_precision_recall = 0.54885805, average_loss = 111.0046, global_step = 1000, label/mean = 0.23622628, loss = 14119.265, precision = 0.6682401, prediction/mean = 0.09116262, recall = 0.2576703{'accuracy': 0.7944229,'accuracy_baseline': 0.76377374,'auc': 0.6093755,'auc_precision_recall': 0.54885805,'average_loss': 111.0046,'global_step': 1000,'label/mean': 0.23622628,'loss': 14119.265,'precision': 0.6682401,'prediction/mean': 0.09116262,'recall': 0.2576703}

Biến bình phương đã cải thiện độ chính xác từ 0,76 lên 0,79. Hãy xem liệu bạn có thể làm tốt hơn bằng cách kết hợp thuật ngữ bán đấu giá và tương tác với nhau hay không.

Bán đấu giá và tương tác

Như bạn đã thấy trước đây, bộ phân loại tuyến tính không thể nắm bắt chính xác mẫu thu nhập theo độ tuổi. Đó là bởi vì nó học một trọng số duy nhất cho mỗi tính năng. Để giúp bộ phân loại dễ dàng hơn, một điều bạn có thể làm là nhóm tính năng. Bucketing chuyển đổi một đối tượng địa lý số thành một số đối tượng địa lý nhất định dựa trên phạm vi mà đối tượng địa lý rơi vào và mỗi tính năng mới này cho biết liệu tuổi của một người có nằm trong phạm vi đó hay không.

Với các tính năng mới này, mô hình tuyến tính có thể nắm bắt mối quan hệ bằng cách học các trọng lượng khác nhau cho mỗi nhóm.

Trong TensorFlow, nó được thực hiện với bucketized_column. Bạn cần thêm phạm vi giá trị trong ranh giới.

age = tf.feature_column.numeric_column('age')age_buckets = tf.feature_column.bucketized_column(age, boundaries=[18, 25, 30, 35, 40, 45, 50, 55, 60, 65])

Bạn đã biết tuổi tác là không tuyến tính với thu nhập. Một cách khác để cải thiện mô hình là thông qua tương tác. Theo cách nói của TensorFlow, đó là sự giao nhau giữa các tính năng. Kết hợp đối tượng là một cách để tạo các đối tượng địa lý mới là sự kết hợp của các đối tượng địa lý hiện có, điều này có thể hữu ích cho bộ phân loại tuyến tính không thể lập mô hình tương tác giữa các đối tượng địa lý.

Bạn có thể chia nhỏ độ tuổi bằng một tính năng khác như giáo dục. Có nghĩa là, một số nhóm có khả năng có thu nhập cao và những nhóm khác thấp (Hãy nghĩ về sinh viên Tiến sĩ).

education_x_occupation = [tf.feature_column.crossed_column(['education', 'occupation'], hash_bucket_size=1000)]age_buckets_x_education_x_occupation = [tf.feature_column.crossed_column([age_buckets, 'education', 'occupation'], hash_bucket_size=1000)]

Để tạo một cột đối tượng chéo, bạn sử dụng cross_column với các biến để gạch chéo trong một dấu ngoặc. Kích thước hash_bucket_size cho biết khả năng vượt qua tối đa. Để tạo tương tác giữa các biến (ít nhất một biến cần được phân loại), bạn có thể sử dụng tf.feature_column.crossed_column. Để sử dụng đối tượng này, bạn cần thêm vào trong ngoặc vuông biến tương tác và đối số thứ hai, kích thước nhóm. Kích thước nhóm là số lượng nhóm tối đa có thể có trong một biến. Ở đây bạn đặt nó ở mức 1000 vì bạn không biết chính xác số lượng nhóm

age_buckets cần được bình phương trước để thêm nó vào các cột tính năng. Bạn cũng thêm các tính năng mới vào các cột tính năng và chuẩn bị công cụ ước tính

base_columns = [age_buckets,]model_imp = tf.estimator.LinearClassifier(model_dir="ongoing/train3",feature_columns=categorical_features+base_columns+education_x_occupation+age_buckets_x_education_x_occupation)

ĐẦU RA

INFO:tensorflow:Using default config.INFO:tensorflow:Using config: {'_model_dir': 'ongoing/train3', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': None, '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': None, '_service': None, '_cluster_spec': , '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': '', '_evaluation_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1}
FEATURES_imp = ['age','workclass', 'education', 'education_num', 'marital','occupation', 'relationship', 'race', 'sex', 'native_country', 'new']def get_input_fn(data_set, num_epochs=None, n_batch = 128, shuffle=True):return tf.estimator.inputs.pandas_input_fn(x=pd.DataFrame({k: data_set[k].values for k in FEATURES_imp}),y = pd.Series(data_set[LABEL].values),batch_size=n_batch,num_epochs=num_epochs,shuffle=shuffle)

Bạn đã sẵn sàng ước tính mô hình mới và xem liệu nó có cải thiện độ chính xác hay không.

model_imp.train(input_fn=get_input_fn(df_train_new,num_epochs=None,n_batch = 128,shuffle=False),steps=1000)
INFO:tensorflow:Calling model_fn.INFO:tensorflow:Done calling model_fn.INFO:tensorflow:Create CheckpointSaverHook.INFO:tensorflow:Graph was finalized.INFO:tensorflow:Running local_init_op.INFO:tensorflow:Done running local_init_op.INFO:tensorflow:Saving checkpoints for 1 into ongoing/train3/model.ckpt.INFO:tensorflow:loss = 88.722855, step = 1INFO:tensorflow:global_step/sec: 94.969INFO:tensorflow:loss = 50.334488, step = 101 (1.054 sec)INFO:tensorflow:global_step/sec: 242.342INFO:tensorflow:loss = 56.153225, step = 201 (0.414 sec)INFO:tensorflow:global_step/sec: 213.686INFO:tensorflow:loss = 45.792007, step = 301 (0.470 sec)INFO:tensorflow:global_step/sec: 174.084INFO:tensorflow:loss = 37.485672, step = 401 (0.572 sec)INFO:tensorflow:global_step/sec: 191.78INFO:tensorflow:loss = 56.48449, step = 501 (0.524 sec)INFO:tensorflow:global_step/sec: 163.436INFO:tensorflow:loss = 32.528934, step = 601 (0.612 sec)INFO:tensorflow:global_step/sec: 164.347INFO:tensorflow:loss = 37.438057, step = 701 (0.607 sec)INFO:tensorflow:global_step/sec: 154.274INFO:tensorflow:loss = 61.1075, step = 801 (0.647 sec)INFO:tensorflow:global_step/sec: 189.14INFO:tensorflow:loss = 44.69645, step = 901 (0.531 sec)INFO:tensorflow:Saving checkpoints for 1000 into ongoing/train3/model.ckpt.INFO:tensorflow:Loss for final step: 44.18133.
model_imp.evaluate(input_fn=get_input_fn(df_test_new,num_epochs=1,n_batch = 128,shuffle=False),steps=1000)
INFO:tensorflow:Calling model_fn.WARNING:tensorflow:Trapezoidal rule is known to produce incorrect PR-AUCs; please switch to "careful_interpolation" instead.WARNING:tensorflow:Trapezoidal rule is known to produce incorrect PR-AUCs; please switch to "careful_interpolation" instead.INFO:tensorflow:Done calling model_fn.INFO:tensorflow:Starting evaluation at 2018-06-02-08:28:52INFO:tensorflow:Graph was finalized.INFO:tensorflow:Restoring parameters from ongoing/train3/model.ckpt-1000INFO:tensorflow:Running local_init_op.INFO:tensorflow:Done running local_init_op.INFO:tensorflow:Evaluation [100/1000]INFO:tensorflow:Finished evaluation at 2018-06-02-08:28:54INFO:tensorflow:Saving dict for global step 1000: accuracy = 0.8358209, accuracy_baseline = 0.76377374, auc = 0.88401634, auc_precision_recall = 0.69599575, average_loss = 0.35122654, global_step = 1000, label/mean = 0.23622628, loss = 44.67437, precision = 0.68986726, prediction/mean = 0.23320661, recall = 0.55408216{'accuracy': 0.8358209,'accuracy_baseline': 0.76377374,'auc': 0.88401634,'auc_precision_recall': 0.69599575,'average_loss': 0.35122654,'global_step': 1000,'label/mean': 0.23622628,'loss': 44.67437,'precision': 0.68986726,'prediction/mean': 0.23320661,'recall': 0.55408216}

Mức độ chính xác mới là 83,58 phần trăm. Nó cao hơn bốn phần trăm so với mô hình trước đó.

Cuối cùng, bạn có thể thêm một điều khoản quy định để tránh trang bị quá nhiều.

Bước 5) Siêu tham số: Lasso & Ridge

Mô hình của bạn có thể bị trang bị quá nhiều hoặc trang bị thiếu .

  • Overfitting: Mô hình không thể tổng quát hóa dự đoán thành dữ liệu mới
  • Không phù hợp: Mô hình không thể nắm bắt mẫu dữ liệu. tức là, hồi quy tuyến tính khi dữ liệu là phi tuyến tính

Khi một mô hình có nhiều tham số và lượng dữ liệu tương đối thấp, nó sẽ dẫn đến dự đoán kém. Hãy tưởng tượng, một nhóm chỉ có ba quan sát; mô hình sẽ tính toán trọng số cho nhóm này. Trọng lượng được sử dụng để đưa ra dự đoán; nếu các quan sát của tập kiểm tra cho nhóm cụ thể này hoàn toàn khác với tập huấn luyện, thì mô hình sẽ đưa ra dự đoán sai. Trong quá trình đánh giá với tập huấn luyện, độ chính xác là tốt, nhưng không tốt với tập kiểm tra vì các trọng số được tính không phải là trọng số thực để tổng quát hóa mẫu. Trong trường hợp này, nó không đưa ra dự đoán hợp lý về dữ liệu không nhìn thấy được.

Để ngăn chặn việc trang bị quá mức, chính quy hóa cung cấp cho bạn khả năng kiểm soát sự phức tạp như vậy và làm cho nó dễ tổng quát hơn. Có hai kỹ thuật chính quy hóa:

  • L1: Lasso
  • L2: Ridge

Trong TensorFlow, bạn có thể thêm hai siêu tham số này trong trình tối ưu hóa. Ví dụ, siêu thông số L2 càng cao, trọng lượng có xu hướng rất thấp và gần bằng không. Đường vừa vặn sẽ rất bằng phẳng, trong khi L2 gần bằng 0 có nghĩa là trọng số gần với hồi quy tuyến tính thông thường.

Bạn có thể tự mình thử các giá trị khác nhau của các siêu tham số và xem liệu bạn có thể tăng mức độ chính xác hay không.

Lưu ý rằng nếu bạn thay đổi siêu tham số, bạn cần xóa thư mục đang diễn ra / train4 nếu không mô hình sẽ bắt đầu với mô hình đã được đào tạo trước đó.

Hãy xem thế nào là độ chính xác với sự thổi phồng

model_regu = tf.estimator.LinearClassifier(model_dir="ongoing/train4", feature_columns=categorical_features+base_columns+education_x_occupation+age_buckets_x_education_x_occupation,optimizer=tf.train.FtrlOptimizer(learning_rate=0.1,l1_regularization_strength=0.9,l2_regularization_strength=5))

ĐẦU RA

INFO:tensorflow:Using default config.INFO:tensorflow:Using config: {'_model_dir': 'ongoing/train4', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': None, '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': None, '_service': None, '_cluster_spec': , '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': '', '_evaluation_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1}
model_regu.train(input_fn=get_input_fn(df_train_new,num_epochs=None,n_batch = 128,shuffle=False),steps=1000)

ĐẦU RA

INFO:tensorflow:Calling model_fn.INFO:tensorflow:Done calling model_fn.INFO:tensorflow:Create CheckpointSaverHook.INFO:tensorflow:Graph was finalized.INFO:tensorflow:Running local_init_op.INFO:tensorflow:Done running local_init_op.INFO:tensorflow:Saving checkpoints for 1 into ongoing/train4/model.ckpt.INFO:tensorflow:loss = 88.722855, step = 1INFO:tensorflow:global_step/sec: 77.4165INFO:tensorflow:loss = 50.38778, step = 101 (1.294 sec)INFO:tensorflow:global_step/sec: 187.889INFO:tensorflow:loss = 55.38014, step = 201 (0.535 sec)INFO:tensorflow:global_step/sec: 201.895INFO:tensorflow:loss = 46.806694, step = 301 (0.491 sec)INFO:tensorflow:global_step/sec: 217.992INFO:tensorflow:loss = 38.68271, step = 401 (0.460 sec)INFO:tensorflow:global_step/sec: 193.676INFO:tensorflow:loss = 56.99398, step = 501 (0.516 sec)INFO:tensorflow:global_step/sec: 202.195INFO:tensorflow:loss = 33.263622, step = 601 (0.497 sec)INFO:tensorflow:global_step/sec: 216.756INFO:tensorflow:loss = 37.7902, step = 701 (0.459 sec)INFO:tensorflow:global_step/sec: 240.215INFO:tensorflow:loss = 61.732605, step = 801 (0.416 sec)INFO:tensorflow:global_step/sec: 220.336INFO:tensorflow:loss = 46.938225, step = 901 (0.456 sec)INFO:tensorflow:Saving checkpoints for 1000 into ongoing/train4/model.ckpt.INFO:tensorflow:Loss for final step: 43.4942.
model_regu.evaluate(input_fn=get_input_fn(df_test_new,num_epochs=1,n_batch = 128,shuffle=False),steps=1000)

ĐẦU RA

INFO:tensorflow:Calling model_fn.WARNING:tensorflow:Trapezoidal rule is known to produce incorrect PR-AUCs; please switch to "careful_interpolation" instead.WARNING:tensorflow:Trapezoidal rule is known to produce incorrect PR-AUCs; please switch to "careful_interpolation" instead.INFO:tensorflow:Done calling model_fn.INFO:tensorflow:Starting evaluation at 2018-06-02-08:29:07INFO:tensorflow:Graph was finalized.INFO:tensorflow:Restoring parameters from ongoing/train4/model.ckpt-1000INFO:tensorflow:Running local_init_op.INFO:tensorflow:Done running local_init_op.INFO:tensorflow:Evaluation [100/1000]INFO:tensorflow:Finished evaluation at 2018-06-02-08:29:09INFO:tensorflow:Saving dict for global step 1000: accuracy = 0.83833915, accuracy_baseline = 0.76377374, auc = 0.8869794, auc_precision_recall = 0.7014905, average_loss = 0.34691378, global_step = 1000, label/mean = 0.23622628, loss = 44.12581, precision = 0.69720596, prediction/mean = 0.23662092, recall = 0.5579823{'accuracy': 0.83833915,'accuracy_baseline': 0.76377374,'auc': 0.8869794,'auc_precision_recall': 0.7014905,'average_loss': 0.34691378,'global_step': 1000,'label/mean': 0.23622628,'loss': 44.12581,'precision': 0.69720596,'prediction/mean': 0.23662092,'recall': 0.5579823}

Với siêu thông số này, bạn tăng một chút số liệu về độ chính xác. Trong hướng dẫn tiếp theo, bạn sẽ học cách cải thiện bộ phân loại tuyến tính bằng phương pháp hạt nhân.

Tóm lược

Để đào tạo một người mẫu, bạn cần phải:

  • Xác định các tính năng: Các biến độc lập: X
  • Xác định nhãn: Biến phụ thuộc: y
  • Xây dựng một đoàn tàu / bộ thử nghiệm
  • Xác định trọng lượng ban đầu
  • Xác định hàm mất mát: MSE
  • Tối ưu hóa mô hình: Gradient descent
  • Định nghĩa:
    • Tỷ lệ học
    • Số kỷ nguyên
    • Kích thước lô
    • Số lớp

Trong hướng dẫn này, bạn đã học cách sử dụng API cấp cao cho bộ phân loại hồi quy tuyến tính. Bạn cần xác định:

  1. Các cột tính năng. Nếu liên tục: tf.feature_column.numeric_column (). Bạn có thể điền vào một danh sách với khả năng hiểu danh sách python
  2. Công cụ ước tính: tf.estimator.LinearClassifier (feature_columns, model_dir, n_classes = 2)
  3. Một hàm để nhập dữ liệu, kích thước lô và kỷ nguyên: input_fn ()

Sau đó, bạn đã sẵn sàng đào tạo, đánh giá và đưa ra dự đoán với train (), eval () và dự đoán ()

Để cải thiện hiệu suất của mô hình, bạn có thể:

  • Sử dụng hồi quy đa thức
  • Thuật ngữ tương tác: tf.feature_column.crossed_column
  • Thêm thông số chính quy