Mã python cho các thuật toán học máy

Mặc dù học máy nghe có vẻ kỹ thuật cao, nhưng phần giới thiệu về các phương pháp thống kê liên quan sẽ nhanh chóng đưa nó vào tầm tay. Trong bài viết này, Kỹ sư phần mềm tự do Toptal Vladyslav Millier khám phá các thuật toán học máy có giám sát cơ bản và scikit-learning, sử dụng chúng để dự đoán tỷ lệ sống sót của các hành khách Titanic

Qua

Vlad Miller

Vlad là một kỹ sư phần mềm đa năng với kinh nghiệm trong nhiều lĩnh vực. Anh ấy hiện đang hoàn thiện các kỹ năng Scala và máy học của mình

ĐĂNG LẠI

ĐĂNG LẠI

Đọc bản tiếng Tây Ban Nha

của bài viết này do Marisela Ordaz dịch

Mục tiêu chính của bài đọc này là hiểu đủ phương pháp thống kê để có thể tận dụng các thuật toán học máy trong thư viện scikit-learning của Python và sau đó áp dụng kiến ​​thức này để giải quyết một vấn đề học máy cổ điển

Điểm dừng đầu tiên của hành trình sẽ đưa chúng ta đi qua một lịch sử ngắn gọn về máy học. Sau đó, chúng ta sẽ đi sâu vào các thuật toán khác nhau. Ở điểm dừng cuối cùng, chúng ta sẽ sử dụng những gì đã học để giải Bài toán dự đoán tỷ lệ sống sót của Titanic

Một số tuyên bố từ chối trách nhiệm

  • Tôi là một kỹ sư phần mềm toàn diện, không phải là chuyên gia về thuật toán máy học
  • Tôi giả sử bạn biết một số Python cơ bản
  • Đây là phần khám phá, vì vậy không phải mọi chi tiết đều được giải thích giống như trong hướng dẫn

Với lưu ý đó, chúng ta hãy đi sâu vào

Giới thiệu nhanh về thuật toán học máy

Ngay khi dấn thân vào lĩnh vực này, bạn sẽ nhận ra rằng học máy ít lãng mạn hơn bạn nghĩ. Ban đầu, tôi rất hy vọng rằng sau khi học được nhiều hơn, tôi sẽ có thể xây dựng Jarvis AI của riêng mình, thứ sẽ dành cả ngày để viết mã phần mềm và kiếm tiền cho tôi, để tôi có thể dành cả ngày ở ngoài trời để đọc sách, lái xe máy, . Tuy nhiên, tôi sớm nhận ra rằng nền tảng của các thuật toán học máy là số liệu thống kê, điều mà cá nhân tôi thấy buồn tẻ và không thú vị. May mắn thay, hóa ra những số liệu thống kê “buồn tẻ” lại có một số ứng dụng rất hấp dẫn

Bạn sẽ sớm khám phá ra rằng để có được những ứng dụng hấp dẫn đó, bạn cần hiểu rất rõ về thống kê. Một trong những mục tiêu của thuật toán học máy là tìm các phụ thuộc thống kê trong dữ liệu được cung cấp

Dữ liệu được cung cấp có thể là bất cứ thứ gì từ kiểm tra huyết áp theo độ tuổi đến tìm văn bản viết tay dựa trên màu sắc của các pixel khác nhau

Điều đó nói rằng, tôi tò mò muốn xem liệu tôi có thể sử dụng các thuật toán học máy để tìm các phụ thuộc trong các hàm băm mật mã [SHA, MD5, v.v. ]—tuy nhiên, bạn thực sự không thể làm điều đó vì các nguyên mẫu tiền điện tử thích hợp được xây dựng theo cách mà chúng loại bỏ các phụ thuộc và tạo ra đầu ra khó dự đoán đáng kể. Tôi tin rằng, với một lượng thời gian vô tận, các thuật toán học máy có thể bẻ khóa bất kỳ mô hình tiền điện tử nào

Thật không may, chúng tôi không có nhiều thời gian như vậy, vì vậy chúng tôi cần tìm một cách khác để khai thác tiền điện tử một cách hiệu quả. Chúng ta đã đi được bao xa cho đến bây giờ?

Sơ lược về lịch sử các thuật toán học máy

Nguồn gốc của các thuật toán học máy đến từ Thomas Bayes, một nhà thống kê người Anh sống ở thế kỷ 18. Bài viết của ông An Essay Towards Solving a Problem in the Doctrine of Chances củng cố Định lý Bayes, được áp dụng rộng rãi trong lĩnh vực thống kê

Vào thế kỷ 19, Pierre-Simon Laplace đã xuất bản cuốn sách Lý thuyết phân tích xác suất, mở rộng công trình của Bayes và định nghĩa những gì chúng ta biết ngày nay là Định lý Bayes. Trước đó không lâu, Adrien-Marie Legendre đã mô tả phương pháp “bình phương nhỏ nhất”, ngày nay cũng được sử dụng rộng rãi trong học tập có giám sát

Thế kỷ 20 là thời kỳ mà phần lớn các khám phá được công chúng biết đến đã được thực hiện trong lĩnh vực này. Andrey Markov đã phát minh ra chuỗi Markov mà ông dùng để phân tích các bài thơ. Alan Turing đã đề xuất một cỗ máy học tập có thể trở nên thông minh nhân tạo, về cơ bản là báo trước các thuật toán di truyền. Frank Rosenblatt đã phát minh ra Perceptron, gây ra sự phấn khích lớn và phủ sóng rộng rãi trên các phương tiện truyền thông

Nhưng sau đó những năm 1970 đã chứng kiến ​​rất nhiều sự bi quan xung quanh ý tưởng về AI—và do đó, nguồn tài trợ bị giảm sút—vì vậy giai đoạn này được gọi là mùa đông AI. Việc khám phá lại backpropagation vào những năm 1980 đã gây ra sự hồi sinh trong nghiên cứu máy học. Và hôm nay, nó lại là một chủ đề nóng

Leo Breiman quá cố đã phân biệt giữa hai mô hình mô hình thống kê. Mô hình hóa dữ liệu và mô hình thuật toán. “Mô hình hóa thuật toán” ít nhiều có nghĩa là các thuật toán học máy như khu rừng ngẫu nhiên

Học máy và thống kê là những lĩnh vực liên quan chặt chẽ. Theo Micheal I. Jordan, những ý tưởng về học máy, từ các nguyên tắc phương pháp luận đến các công cụ lý thuyết, đã có một lịch sử lâu dài trong thống kê. Ông cũng đề xuất khoa học dữ liệu như một thuật ngữ giữ chỗ cho vấn đề tổng thể mà các chuyên gia học máy và nhà thống kê đều đang ngầm giải quyết.

Danh mục thuật toán học máy

Lĩnh vực học máy dựa trên hai trụ cột chính gọi là học có giám sát và học không giám sát. Một số người cũng coi lĩnh vực nghiên cứu mới—học sâu—là tách biệt khỏi câu hỏi giám sát so với. học không giám sát

Học có giám sát là khi một máy tính được cung cấp các ví dụ về đầu vào và đầu ra mong muốn của chúng. Mục tiêu của máy tính là học một công thức chung để ánh xạ đầu vào thành đầu ra. Điều này có thể được chia nhỏ hơn nữa thành

  • Học bán giám sát, đó là khi máy tính được cung cấp một tập huấn luyện chưa hoàn chỉnh với một số đầu ra bị thiếu
  • Học tích cực, đó là khi máy tính chỉ có thể lấy nhãn đào tạo cho một số phiên bản rất hạn chế. Khi được sử dụng tương tác, các tập huấn luyện của chúng có thể được trình bày cho người dùng để ghi nhãn
  • Học tăng cường, đó là khi dữ liệu đào tạo chỉ được cung cấp dưới dạng phản hồi cho các hành động của chương trình trong môi trường động, chẳng hạn như lái xe hoặc chơi trò chơi với đối thủ

Ngược lại, học không giám sát là khi không có nhãn nào được đưa ra và tùy thuộc vào thuật toán để tìm cấu trúc trong đầu vào của nó. Bản thân học tập không giám sát có thể là một mục tiêu khi chúng ta chỉ cần khám phá các mẫu ẩn

Học sâu là một lĩnh vực nghiên cứu mới được lấy cảm hứng từ cấu trúc và chức năng của bộ não con người và dựa trên các mạng thần kinh nhân tạo chứ không chỉ là các khái niệm thống kê. Học sâu có thể được sử dụng theo cả cách tiếp cận có giám sát và không giám sát

Trong bài viết này, chúng ta sẽ chỉ xem xét một số thuật toán học máy được giám sát đơn giản hơn và sử dụng chúng để tính toán cơ hội sống sót của một cá nhân trong thảm kịch chìm tàu ​​Titanic. Nhưng nói chung, nếu bạn không chắc nên sử dụng thuật toán nào, thì một nơi tuyệt vời để bắt đầu là cheat-sheet thuật toán học máy của scikit-learning

Các mô hình học máy được giám sát cơ bản

Có lẽ thuật toán dễ nhất có thể là hồi quy tuyến tính. Đôi khi, đường này có thể được biểu diễn bằng đồ thị dưới dạng một đường thẳng, nhưng bất chấp tên gọi của nó, nếu có một giả thuyết đa thức, thì đường này có thể là một đường cong. Dù bằng cách nào, nó mô hình hóa các mối quan hệ giữa biến phụ thuộc vô hướng $y$ và một hoặc nhiều giá trị giải thích được biểu thị bằng $x$

Theo thuật ngữ của người bình thường, điều này có nghĩa là hồi quy tuyến tính là thuật toán tìm hiểu sự phụ thuộc giữa mỗi $x$ và $y$ đã biết, để sau này chúng ta có thể sử dụng nó để dự đoán $y$ cho một mẫu $x$ chưa biết

Trong ví dụ học tập có giám sát đầu tiên của chúng tôi, chúng tôi sẽ sử dụng mô hình hồi quy tuyến tính cơ bản để dự đoán huyết áp của một người theo độ tuổi của họ. Đây là một bộ dữ liệu rất đơn giản với hai tính năng có ý nghĩa. Tuổi tác và huyết áp

Như đã đề cập ở trên, hầu hết các thuật toán học máy hoạt động bằng cách tìm sự phụ thuộc thống kê trong dữ liệu được cung cấp cho chúng. Sự phụ thuộc này được gọi là giả thuyết và thường được ký hiệu là $h[\theta]$

Để tìm ra giả thuyết, hãy bắt đầu bằng cách tải và khám phá dữ liệu

import matplotlib.pyplot as plt
from pandas import read_csv
import os

# Load data
data_path = os.path.join[os.getcwd[], "data/blood-pressure.txt"]
dataset = read_csv[data_path, delim_whitespace=True]

# We have 30 entries in our dataset and four features. The first feature is the ID of the entry.
# The second feature is always 1. The third feature is the age and the last feature is the blood pressure.
# We will now drop the ID and One feature for now, as this is not important.
dataset = dataset.drop[['ID', 'One'], axis=1]

# And we will display this graph
%matplotlib inline
dataset.plot.scatter[x='Age', y='Pressure']

# Now, we will assume that we already know the hypothesis and it looks like a straight line
h = lambda x: 84 + 1.24 * x

# Let's add this line on the chart now
ages = range[18, 85]
estimated = []

for i in ages:
    estimated.append[h[i]]

plt.plot[ages, estimated, 'b']  

import numpy as np
# Let's calculate the cost for the hypothesis above

h = lambda x, theta_0, theta_1: theta_0 + theta_1 * x

def cost[X, y, t0, t1]:
    m = len[X] # the number of the training samples
    c = np.power[np.subtract[h[X, t0, t1], y], 2]
    return [1 / [2 * m]] * sum[c]

X = dataset.values[:, 0]
y = dataset.values[:, 1]
print['J[Theta] = %2.2f' % cost[X, y, 84, 1.24]]
8

Trên biểu đồ trên, mỗi chấm màu xanh đại diện cho mẫu dữ liệu của chúng tôi và đường màu xanh là giả thuyết mà thuật toán của chúng tôi cần tìm hiểu. Vì vậy, chính xác thì giả thuyết này là gì?

Để giải quyết vấn đề này, chúng ta cần tìm hiểu sự phụ thuộc giữa $x$ và $y$, được ký hiệu là $y = f[x]$. Do đó $f[x]$ là hàm mục tiêu lý tưởng. Thuật toán máy học sẽ cố gắng đoán hàm giả thuyết $h[x]$ là hàm gần đúng nhất của $f[x]$ chưa biết

Dạng giả thuyết đơn giản nhất có thể cho bài toán hồi quy tuyến tính trông như thế này. $h_\theta[x] = \theta_0 + \theta_1 * x$. Chúng ta có một biến vô hướng đầu vào duy nhất $x$, biến này cho ra một biến vô hướng duy nhất $y$, trong đó $\theta_0$ và $\theta_1$ là các tham số mà chúng ta cần tìm hiểu. Quá trình khớp đường màu xanh lam này trong dữ liệu được gọi là hồi quy tuyến tính. Điều quan trọng là phải hiểu rằng chúng tôi chỉ có một tham số đầu vào $x_1$; . Vì vậy, giả thuyết thu được của chúng ta có dạng $h_\theta[x] = \theta_0 * x_0 + \theta_1 * x_1$. Nhưng chúng ta có thể tránh viết $x_0$ vì nó hầu như luôn bằng 1

Quay trở lại dòng màu xanh. Giả thuyết của chúng ta giống như $h[x] = 84 + 1. 24x$, nghĩa là $\theta_0 = 84$ và $\theta_1 = 1. 24$. Làm cách nào chúng tôi có thể tự động lấy các giá trị $\theta$ đó?

Chúng ta cần xác định một hàm chi phí. Về cơ bản, những gì hàm chi phí làm chỉ đơn giản là tính toán lỗi bình phương trung bình gốc giữa dự đoán mô hình và đầu ra thực tế

\[J[\theta] = \frac{1}{2m}\sum_{i=1}^m[h_\theta[x^{[i]}] - y^{[i]}]^2\

Ví dụ: giả thuyết của chúng tôi dự đoán rằng đối với một người 48 tuổi, huyết áp của họ sẽ là $h[48] = 84 + 1. 24 * 48 = 143mmHg$; . Do đó, lỗi là $[143 - 130]^2 = 169$. Bây giờ chúng ta cần tính toán lỗi này cho từng mục nhập trong tập dữ liệu đào tạo của mình, sau đó tính tổng lại với nhau [$\sum_{i=1}^m[h_\theta[x^{[i]}] - y^{[i

Điều này cho chúng ta một số vô hướng duy nhất biểu thị chi phí của hàm. Mục tiêu của chúng tôi là tìm các giá trị $\theta$ sao cho hàm chi phí là thấp nhất; . Điều này hy vọng sẽ có vẻ trực quan. Nếu chúng ta có một giá trị hàm chi phí nhỏ, điều này có nghĩa là lỗi dự đoán cũng nhỏ

import numpy as np
# Let's calculate the cost for the hypothesis above

h = lambda x, theta_0, theta_1: theta_0 + theta_1 * x

def cost[X, y, t0, t1]:
    m = len[X] # the number of the training samples
    c = np.power[np.subtract[h[X, t0, t1], y], 2]
    return [1 / [2 * m]] * sum[c]

X = dataset.values[:, 0]
y = dataset.values[:, 1]
print['J[Theta] = %2.2f' % cost[X, y, 84, 1.24]]

import numpy as np
# Let's calculate the cost for the hypothesis above

h = lambda x, theta_0, theta_1: theta_0 + theta_1 * x

def cost[X, y, t0, t1]:
    m = len[X] # the number of the training samples
    c = np.power[np.subtract[h[X, t0, t1], y], 2]
    return [1 / [2 * m]] * sum[c]

X = dataset.values[:, 0]
y = dataset.values[:, 1]
print['J[Theta] = %2.2f' % cost[X, y, 84, 1.24]]
9

Bây giờ, chúng ta cần tìm các giá trị của $\theta$ sao cho giá trị hàm chi phí của chúng ta là nhỏ nhất. Nhưng chúng ta làm như thế nào?

\[minJ[\theta] = \frac{1}{2m}\sum_{i=1}^m[h_\theta[x^{[i]}] - y^{[i]}]^2\

Có một số thuật toán khả thi, nhưng phổ biến nhất là giảm dần độ dốc. Để hiểu trực giác đằng sau phương pháp giảm dần độ dốc, trước tiên hãy vẽ nó trên biểu đồ. Để đơn giản, chúng ta sẽ giả sử một giả thuyết đơn giản hơn $h[\theta] = \theta_1 * x$. Tiếp theo, chúng ta sẽ vẽ biểu đồ 2D đơn giản trong đó $x$ là giá trị của $\theta$ và $y$ là hàm chi phí tại thời điểm này

import matplotlib.pyplot as plt

fig = plt.figure[]

# Generate the data
theta_1 = np.arange[-10, 14, 0.1]

J_cost = []
for t1 in theta_1:
    J_cost += [ cost[X, y, 0, t1] ]

plt.plot[theta_1, J_cost]

plt.xlabel[r'$\theta_1$']
plt.ylabel[r'$J[\theta]$']

plt.show[]

Hàm chi phí lồi, có nghĩa là trên khoảng $[a, b]$ chỉ có một điểm cực tiểu. Điều này một lần nữa có nghĩa là các tham số $\theta$ tốt nhất nằm ở điểm mà hàm chi phí là nhỏ nhất.

Về cơ bản, giảm độ dốc là một thuật toán cố gắng tìm tập hợp các tham số làm giảm thiểu chức năng. Nó bắt đầu với một bộ tham số ban đầu và lặp đi lặp lại các bước theo hướng tiêu cực của gradient chức năng

Nếu chúng ta tính đạo hàm của hàm giả thuyết tại một điểm cụ thể, điều này sẽ cho chúng ta hệ số góc của tiếp tuyến với đường cong tại điểm đó. Điều này có nghĩa là chúng ta có thể tính độ dốc tại mọi điểm trên biểu đồ

Cách thức hoạt động của thuật toán là thế này

  1. Chúng tôi chọn một điểm bắt đầu ngẫu nhiên [ngẫu nhiên $\theta$]
  2. Tính đạo hàm của hàm chi phí tại thời điểm này
  3. Bước từng bước nhỏ về phía con dốc $\theta_j. = \theta_j - \lambda * \frac{\partial}{\partial \theta_j} * J[\theta]$
  4. Lặp lại các bước 2-3 cho đến khi chúng tôi hội tụ

Bây giờ, điều kiện hội tụ phụ thuộc vào việc thực hiện thuật toán. Chúng tôi có thể dừng sau 50 bước, sau một số ngưỡng hoặc bất kỳ thứ gì khác

import math
# Example of the simple gradient descent algorithm taken from Wikipedia

cur_x = 2.5 # The algorithm starts at point x
gamma = 0.005 # Step size multiplier
precision = 0.00001
previous_step_size = cur_x

df = lambda x: 2 * x * math.cos[x]

# Remember the learning curve and plot it 

while previous_step_size > precision:
    prev_x = cur_x
    cur_x += -gamma * df[prev_x]
    previous_step_size = abs[cur_x - prev_x]

print["The local minimum occurs at %f" % cur_x]

import matplotlib.pyplot as plt

fig = plt.figure[]

# Generate the data
theta_1 = np.arange[-10, 14, 0.1]

J_cost = []
for t1 in theta_1:
    J_cost += [ cost[X, y, 0, t1] ]

plt.plot[theta_1, J_cost]

plt.xlabel[r'$\theta_1$']
plt.ylabel[r'$J[\theta]$']

plt.show[]
0

Chúng tôi sẽ không thực hiện các thuật toán đó trong bài viết này. Thay vào đó, chúng tôi sẽ sử dụng

import matplotlib.pyplot as plt

fig = plt.figure[]

# Generate the data
theta_1 = np.arange[-10, 14, 0.1]

J_cost = []
for t1 in theta_1:
    J_cost += [ cost[X, y, 0, t1] ]

plt.plot[theta_1, J_cost]

plt.xlabel[r'$\theta_1$']
plt.ylabel[r'$J[\theta]$']

plt.show[]
1 được chấp nhận rộng rãi, một thư viện máy học mã nguồn mở Python. Nó cung cấp rất nhiều API rất hữu ích cho các vấn đề khai thác dữ liệu và học máy khác nhau

from sklearn.linear_model import LinearRegression
# LinearRegression uses the gradient descent method

# Our data
X = dataset[['Age']]
y = dataset[['Pressure']]

regr = LinearRegression[]
regr.fit[X, y]

# Plot outputs
plt.xlabel['Age']
plt.ylabel['Blood pressure']

plt.scatter[X, y,  color='black']
plt.plot[X, regr.predict[X], color='blue']

plt.show[]
plt.gcf[].clear[]

import matplotlib.pyplot as plt

fig = plt.figure[]

# Generate the data
theta_1 = np.arange[-10, 14, 0.1]

J_cost = []
for t1 in theta_1:
    J_cost += [ cost[X, y, 0, t1] ]

plt.plot[theta_1, J_cost]

plt.xlabel[r'$\theta_1$']
plt.ylabel[r'$J[\theta]$']

plt.show[]
2

import numpy as np
# Let's calculate the cost for the hypothesis above

h = lambda x, theta_0, theta_1: theta_0 + theta_1 * x

def cost[X, y, t0, t1]:
    m = len[X] # the number of the training samples
    c = np.power[np.subtract[h[X, t0, t1], y], 2]
    return [1 / [2 * m]] * sum[c]

X = dataset.values[:, 0]
y = dataset.values[:, 1]
print['J[Theta] = %2.2f' % cost[X, y, 84, 1.24]]
0
import numpy as np
# Let's calculate the cost for the hypothesis above

h = lambda x, theta_0, theta_1: theta_0 + theta_1 * x

def cost[X, y, t0, t1]:
    m = len[X] # the number of the training samples
    c = np.power[np.subtract[h[X, t0, t1], y], 2]
    return [1 / [2 * m]] * sum[c]

X = dataset.values[:, 0]
y = dataset.values[:, 1]
print['J[Theta] = %2.2f' % cost[X, y, 84, 1.24]]
1

Các loại dữ liệu thống kê

Khi làm việc với dữ liệu cho các vấn đề học máy, điều quan trọng là phải nhận ra các loại dữ liệu khác nhau. Chúng tôi có thể có dữ liệu số [liên tục hoặc rời rạc], phân loại hoặc thứ tự

Dữ liệu số có ý nghĩa như một phép đo. Ví dụ: tuổi, cân nặng, số bitcoin mà một người sở hữu hoặc số lượng bài báo mà người đó có thể viết mỗi tháng. Dữ liệu số có thể được chia nhỏ thành các loại rời rạc và liên tục

  • Dữ liệu rời rạc biểu thị dữ liệu có thể được đếm bằng số nguyên, e. g. , số phòng trong một căn hộ hoặc số lần tung đồng xu
  • Dữ liệu liên tục không nhất thiết phải được biểu diễn bằng số nguyên. Ví dụ: nếu bạn đang đo khoảng cách bạn có thể nhảy, thì khoảng cách đó có thể là 2 mét hoặc 1. 5 mét, hoặc 1. 652245 mét

Dữ liệu phân loại thể hiện các giá trị như giới tính của một người, tình trạng hôn nhân, quốc gia, v.v. Dữ liệu này có thể lấy giá trị số, nhưng những con số đó không có ý nghĩa toán học. Bạn không thể thêm chúng lại với nhau

Dữ liệu thứ tự có thể là sự kết hợp của hai loại còn lại, trong đó các loại có thể được đánh số theo cách có ý nghĩa toán học. Một ví dụ phổ biến là xếp hạng. Chúng tôi thường được yêu cầu đánh giá mọi thứ theo thang điểm từ một đến mười và chỉ cho phép đánh giá các số nguyên. Trong khi chúng ta có thể sử dụng số này—e. g. , để tìm xếp hạng trung bình cho một nội dung nào đó—chúng tôi thường xử lý dữ liệu như thể đó là dữ liệu phân loại khi áp dụng các phương pháp máy học cho dữ liệu đó

Hồi quy logistic

Hồi quy tuyến tính là một thuật toán tuyệt vời giúp chúng ta dự đoán các giá trị số, e. g. , giá nhà với diện tích và số phòng cụ thể. Tuy nhiên, đôi khi, chúng tôi cũng có thể muốn dự đoán dữ liệu phân loại để có câu trả lời cho các câu hỏi như

  • Đây là chó hay mèo?
  • Khối u này ác tính hay lành tính?
  • Rượu này tốt hay xấu?
  • Email này có phải là thư rác hay không?

Hoặc thậm chí

  • Số nào trong hình?
  • Email này thuộc danh mục nào?

Tất cả những câu hỏi này là cụ thể cho vấn đề phân loại. Và thuật toán phân loại đơn giản nhất được gọi là hồi quy logistic, cuối cùng cũng giống như hồi quy tuyến tính ngoại trừ việc nó có một giả thuyết khác

Trước hết, chúng ta có thể sử dụng lại cùng giả thuyết tuyến tính $h_\theta[x] = \theta^T X$ [cái này ở dạng vector hóa]. Trong khi hồi quy tuyến tính có thể đưa ra bất kỳ số nào trong khoảng $[a, b]$, thì hồi quy logistic chỉ có thể đưa ra các giá trị trong $[−1, 1]$, là xác suất của đối tượng có thuộc một danh mục nhất định hay không

Sử dụng hàm sigmoid, chúng ta có thể chuyển đổi bất kỳ giá trị số nào để biểu thị một giá trị trên khoảng $[−1, 1]$

\[f[x] = \frac{1}{1 + e^x}\]

Bây giờ, thay vì $x$, chúng ta cần chuyển một giả thuyết hiện có và do đó chúng ta sẽ nhận được

\[f[x] = \frac{1}{1 + e^{\theta_0 + \theta_1 * x_1 +. + \theta_n * x_n}}\]

Sau đó, chúng ta có thể áp dụng một ngưỡng đơn giản nói rằng nếu giả thuyết lớn hơn 0, thì đây là một giá trị đúng, nếu không thì sai

\[h_\theta[x] = \begin{cases} 1 & \mbox{if } \theta^T X > 0 \\ 0 & \mbox{else} \end{cases}\]

Điều này có nghĩa là chúng ta có thể sử dụng cùng một hàm chi phí và cùng một thuật toán giảm dần độ dốc để tìm hiểu một giả thuyết cho hồi quy logistic

Trong ví dụ về thuật toán máy học tiếp theo của chúng tôi, chúng tôi sẽ tư vấn cho các phi công của tàu con thoi xem họ nên sử dụng điều khiển hạ cánh tự động hay bằng tay hay không. Chúng tôi có một tập dữ liệu rất nhỏ—15 mẫu—bao gồm sáu tính năng và thông tin cơ bản

Trong các thuật toán học máy, thuật ngữ “sự thật cơ bản” đề cập đến độ chính xác của việc phân loại tập huấn luyện cho các kỹ thuật học có giám sát

Bộ dữ liệu của chúng tôi đã hoàn tất, nghĩa là không có tính năng nào bị thiếu; . Chúng tôi sẽ thay thế tất cả các dấu hoa thị như vậy bằng số không

import numpy as np
# Let's calculate the cost for the hypothesis above

h = lambda x, theta_0, theta_1: theta_0 + theta_1 * x

def cost[X, y, t0, t1]:
    m = len[X] # the number of the training samples
    c = np.power[np.subtract[h[X, t0, t1], y], 2]
    return [1 / [2 * m]] * sum[c]

X = dataset.values[:, 0]
y = dataset.values[:, 1]
print['J[Theta] = %2.2f' % cost[X, y, 84, 1.24]]
2

import matplotlib.pyplot as plt

fig = plt.figure[]

# Generate the data
theta_1 = np.arange[-10, 14, 0.1]

J_cost = []
for t1 in theta_1:
    J_cost += [ cost[X, y, 0, t1] ]

plt.plot[theta_1, J_cost]

plt.xlabel[r'$\theta_1$']
plt.ylabel[r'$J[\theta]$']

plt.show[]
3

Thẩm định?

Trong ví dụ trước, chúng tôi đã xác thực hiệu suất của mô hình bằng cách sử dụng dữ liệu học tập. Tuy nhiên, bây giờ đây có phải là một lựa chọn tốt không, vì thuật toán của chúng tôi có thể không phù hợp với dữ liệu quá mức?

import numpy as np
# Let's calculate the cost for the hypothesis above

h = lambda x, theta_0, theta_1: theta_0 + theta_1 * x

def cost[X, y, t0, t1]:
    m = len[X] # the number of the training samples
    c = np.power[np.subtract[h[X, t0, t1], y], 2]
    return [1 / [2 * m]] * sum[c]

X = dataset.values[:, 0]
y = dataset.values[:, 1]
print['J[Theta] = %2.2f' % cost[X, y, 84, 1.24]]
4

Mô hình thuật toán học máy không phù hợp nếu nó không thể khái quát hóa dữ liệu đào tạo cũng như các quan sát mới. Trong ví dụ trên, chúng tôi sử dụng một giả thuyết tuyến tính đơn giản không thực sự đại diện cho tập dữ liệu huấn luyện thực tế và sẽ có hiệu suất rất kém. Thông thường, việc mặc đồ lót không được thảo luận vì nó có thể dễ dàng được phát hiện với một số liệu tốt.

Nếu thuật toán của chúng ta ghi nhớ mọi quan sát mà nó được hiển thị, thì nó sẽ có hiệu suất kém đối với các quan sát mới bên ngoài tập dữ liệu huấn luyện. Điều này được gọi là trang bị quá mức. Ví dụ: mô hình đa thức bậc 30 vượt qua hầu hết các điểm và có điểm rất tốt trên tập huấn luyện, nhưng bất kỳ thứ gì ngoài điểm đó sẽ hoạt động kém

Tập dữ liệu của chúng tôi bao gồm một tính năng và rất đơn giản để vẽ biểu đồ trong không gian 2D; . Chúng ta có những tùy chọn nào khác để xem liệu mô hình có trang bị thiếu hay thừa không?

Đã đến lúc giới thiệu cho bạn khái niệm về đường cong học tập. Đây là một biểu đồ đơn giản biểu thị lỗi bình phương trung bình trên số lượng mẫu đào tạo

Trong các tài liệu học tập, bạn thường sẽ thấy các biểu đồ tương tự như thế này

Tuy nhiên, trong cuộc sống thực, bạn có thể không có được một bức ảnh hoàn hảo như vậy. Hãy vẽ đường cong học tập cho từng mô hình của chúng tôi

import numpy as np
# Let's calculate the cost for the hypothesis above

h = lambda x, theta_0, theta_1: theta_0 + theta_1 * x

def cost[X, y, t0, t1]:
    m = len[X] # the number of the training samples
    c = np.power[np.subtract[h[X, t0, t1], y], 2]
    return [1 / [2 * m]] * sum[c]

X = dataset.values[:, 0]
y = dataset.values[:, 1]
print['J[Theta] = %2.2f' % cost[X, y, 84, 1.24]]
5

Trong kịch bản mô phỏng của chúng tôi, đường màu xanh biểu thị điểm rèn luyện có vẻ giống như một đường thẳng. Trên thực tế, nó vẫn giảm một chút—bạn thực sự có thể thấy điều này trong đồ thị đa thức bậc nhất, nhưng ở những đồ thị khác thì quá tinh tế để nói ở độ phân giải này. Ít nhất chúng ta thấy rõ ràng rằng có một khoảng cách rất lớn giữa các đường cong học tập để đào tạo và kiểm tra các quan sát với kịch bản “độ thiên vị cao”.

Trên biểu đồ tỷ lệ học tập “bình thường” ở giữa, bạn có thể thấy các đường điểm kiểm tra và điểm rèn luyện kết hợp với nhau như thế nào

Và trên biểu đồ “phương sai cao”, bạn có thể thấy rằng với số lượng mẫu thấp, điểm kiểm tra và đào tạo rất giống nhau;

Chúng ta có thể sửa các mô hình thiếu phù hợp [còn gọi là các mô hình có độ lệch cao] nếu chúng ta sử dụng một giả thuyết phi tuyến tính, e. g. , giả thuyết với nhiều tính năng đa thức hơn

Mô hình trang bị quá mức [phương sai cao] của chúng tôi đi qua từng ví dụ đơn lẻ mà nó được hiển thị; . Chúng tôi có thể sử dụng quy chuẩn hóa, xác thực chéo và nhiều mẫu dữ liệu khác để khắc phục các mô hình trang bị quá mức

xác thực chéo

Một trong những phương pháp phổ biến để tránh trang bị quá mức là giữ một phần dữ liệu có sẵn và sử dụng nó làm bộ kiểm tra. Tuy nhiên, khi đánh giá các cài đặt mô hình khác nhau, chẳng hạn như số lượng tính năng đa thức, chúng tôi vẫn có nguy cơ trang bị quá mức cho bộ kiểm tra vì các tham số có thể được điều chỉnh để đạt được hiệu suất ước tính tối ưu và do đó, kiến ​​thức của chúng tôi về bộ kiểm tra có thể . Để giải quyết vấn đề này, chúng ta cần nắm giữ thêm một phần của bộ dữ liệu, được gọi là “bộ xác nhận. ” Quá trình đào tạo được tiến hành trên tập huấn luyện và khi chúng tôi nghĩ rằng mình đã đạt được hiệu suất mô hình tối ưu, chúng tôi có thể đưa ra đánh giá cuối cùng bằng cách sử dụng tập xác thực

Tuy nhiên, bằng cách phân vùng dữ liệu có sẵn thành ba tập hợp, chúng tôi giảm đáng kể số lượng mẫu có thể được sử dụng để huấn luyện các mô hình và kết quả có thể phụ thuộc vào một lựa chọn ngẫu nhiên cụ thể cho cặp tập hợp huấn luyện-xác nhận

Một giải pháp cho vấn đề này là một thủ tục được gọi là xác nhận chéo. Trong xác thực chéo $k$-fold tiêu chuẩn, chúng tôi phân chia dữ liệu thành các tập hợp con $k$, được gọi là các nếp gấp. Sau đó, chúng tôi huấn luyện lặp lại thuật toán trên các lần gấp $k-1$ trong khi sử dụng số lần gấp còn lại làm tập kiểm tra [được gọi là “lần giữ lại”]

Xác thực chéo cho phép bạn điều chỉnh các tham số chỉ với tập huấn luyện ban đầu của mình. Điều này cho phép bạn giữ bộ thử nghiệm của mình dưới dạng bộ dữ liệu thực sự vô hình để chọn mô hình cuối cùng của bạn

Có nhiều kỹ thuật xác thực chéo hơn, chẳng hạn như loại bỏ P, phân tầng $k$-fold, xáo trộn và tách, v.v. nhưng chúng nằm ngoài phạm vi của bài viết này

Chính quy

Đây là một kỹ thuật khác có thể giúp giải quyết vấn đề mô hình quá khớp. Hầu hết các bộ dữ liệu có một mẫu và một số tiếng ồn. Mục tiêu của chính quy hóa là giảm ảnh hưởng của nhiễu lên mô hình

Có ba kỹ thuật chuẩn hóa chính. Lasso, Tikhonov và lưới đàn hồi

Chính quy hóa L1 [hoặc chính quy hóa Lasso] sẽ chọn một số tính năng để thu nhỏ về 0, sao cho chúng sẽ không đóng bất kỳ vai trò nào trong mô hình cuối cùng. L1 có thể được coi là một phương pháp để chọn các tính năng quan trọng

Chính quy hóa L2 [hoặc chính quy hóa Tikhonov] sẽ buộc tất cả các tính năng tương đối nhỏ, do đó chúng sẽ ít ảnh hưởng hơn đến mô hình

Lưới đàn hồi là sự kết hợp của L1 và L2

Chuẩn hóa [Thu nhỏ tính năng]

Chia tỷ lệ tính năng cũng là một bước quan trọng trong khi tiền xử lý dữ liệu. Tập dữ liệu của chúng tôi có thể có các đối tượng có giá trị $[-\infty, \infty]$ và các đối tượng khác với tỷ lệ khác. Đây là phương pháp chuẩn hóa các khoảng giá trị độc lập

Nhân rộng tính năng cũng là một quá trình quan trọng để cải thiện hiệu suất của các mô hình học tập. Trước hết, giảm dần độ dốc sẽ hội tụ nhanh hơn nhiều nếu tất cả các tính năng được chia tỷ lệ theo cùng một tiêu chuẩn. Ngoài ra, rất nhiều thuật toán—ví dụ: máy vectơ hỗ trợ [SVM]—hoạt động bằng cách tính khoảng cách giữa hai điểm và nếu một trong các đối tượng địa lý có giá trị rộng, thì khoảng cách sẽ bị ảnh hưởng nhiều bởi đối tượng địa lý này.

Hỗ trợ máy Vector

SVM là một thuật toán học máy phổ biến rộng rãi khác có thể được sử dụng cho các vấn đề phân loại và hồi quy. Trong SVM, chúng tôi vẽ từng quan sát dưới dạng một điểm trong không gian $n$ chiều trong đó $n$ là số lượng tính năng chúng tôi có. Giá trị của mỗi tính năng là giá trị của tọa độ cụ thể. Sau đó, chúng tôi cố gắng tìm một siêu phẳng phân tách hai lớp đủ tốt

Sau khi chúng tôi xác định siêu phẳng tốt nhất, chúng tôi muốn thêm lề, điều này sẽ phân tách hai lớp hơn nữa

SVM rất hiệu quả khi số lượng tính năng rất cao hoặc nếu số lượng tính năng lớn hơn thì số lượng mẫu dữ liệu. Tuy nhiên, vì SVM hoạt động trên cơ sở véc-tơ, điều quan trọng là phải chuẩn hóa dữ liệu trước khi sử dụng

Mạng thần kinh

Các thuật toán mạng thần kinh có lẽ là lĩnh vực nghiên cứu máy học thú vị nhất. Mạng lưới thần kinh cố gắng bắt chước cách các tế bào thần kinh của não được kết nối với nhau

Đây là cách một mạng lưới thần kinh trông như thế nào. Chúng tôi kết hợp nhiều nút lại với nhau trong đó mỗi nút nhận một tập hợp đầu vào, áp dụng một số phép tính trên chúng và xuất ra một giá trị

Có rất nhiều thuật toán mạng thần kinh cho cả học tập có giám sát và không giám sát. Mạng lưới thần kinh có thể được sử dụng để lái ô tô tự lái, chơi trò chơi, hạ cánh máy bay, phân loại hình ảnh, v.v.

Con tàu Titanic khét tiếng

RMS Titanic là một tàu chở khách của Anh bị chìm ở Bắc Đại Tây Dương vào ngày 15 tháng 4 năm 1912 sau khi va chạm với một tảng băng trôi. Có khoảng 2.224 thủy thủ đoàn và hành khách, và hơn 1.500 người thiệt mạng, khiến nó trở thành một trong những thảm họa thương mại hàng hải nguy hiểm nhất mọi thời đại.

Giờ đây, vì chúng ta đã hiểu trực giác đằng sau các thuật toán học máy cơ bản nhất được sử dụng cho các vấn đề phân loại, nên chúng ta có thể áp dụng kiến ​​thức của mình để dự đoán kết quả sống sót của những người trên tàu Titanic

Tập dữ liệu của chúng tôi sẽ được mượn từ nền tảng cuộc thi khoa học dữ liệu Kaggle

import numpy as np
# Let's calculate the cost for the hypothesis above

h = lambda x, theta_0, theta_1: theta_0 + theta_1 * x

def cost[X, y, t0, t1]:
    m = len[X] # the number of the training samples
    c = np.power[np.subtract[h[X, t0, t1], y], 2]
    return [1 / [2 * m]] * sum[c]

X = dataset.values[:, 0]
y = dataset.values[:, 1]
print['J[Theta] = %2.2f' % cost[X, y, 84, 1.24]]
0

PassengerIdSurvivedPclassNameSexTuổiSibSpParchTicketFareCabinEmbarked0103Braund, Mr. Owen Harrismale22. 010A/5 211717. 2500NaNS1211Cumings, bà. John Bradley [Florence Briggs Th. nữ38. 010PC 1759971. 2833C85C2313Heikkinen, thưa cô. Lainanữ26. 000STON/O2. 31012827. 9250NaNS3411Futrelle, bà. Jacques Heath [Lily May Peel]nữ35. 01011380353. 1000C123S4503Allen, ông. William Henrymale35. 0003734508. 0500NaNS

Bước đầu tiên của chúng tôi là tải và khám phá dữ liệu. Chúng tôi có 891 hồ sơ kiểm tra;

  • hành kháchId – ID của hành khách trên tàu
  • sống sót – Người đó có sống sót sau vụ tai nạn hay không
  • pclass – Hạng vé, e. g. , 1, 2, 3
  • giới tính – Giới tính của hành khách. Nam hay nữ
  • tên – Bao gồm tiêu đề
  • tuổi – Tuổi theo năm
  • sibsp – Số anh chị em/vợ/chồng trên tàu Titanic
  • parch – Số cha mẹ/con cái trên tàu Titanic
  • vé – Số vé
  • giá cước – Giá cước hành khách
  • cabin – Số cabin
  • Bắt đầu – Cảng nhận hàng

Bộ dữ liệu này chứa cả dữ liệu số và phân loại. Thông thường, bạn nên tìm hiểu sâu hơn về dữ liệu và dựa trên đó đưa ra các giả định. Tuy nhiên, trong trường hợp này, chúng tôi sẽ bỏ qua bước này và đi thẳng vào phần dự đoán

import numpy as np
# Let's calculate the cost for the hypothesis above

h = lambda x, theta_0, theta_1: theta_0 + theta_1 * x

def cost[X, y, t0, t1]:
    m = len[X] # the number of the training samples
    c = np.power[np.subtract[h[X, t0, t1], y], 2]
    return [1 / [2 * m]] * sum[c]

X = dataset.values[:, 0]
y = dataset.values[:, 1]
print['J[Theta] = %2.2f' % cost[X, y, 84, 1.24]]
1

Chức vụ \ Giới tínhnữnamCapt01Col02Countess10Don01Dr16Jonkheer01Lady10Major02Master040Miss1820Mlle20Mme10Mr0517Mrs1250Ms10Rev06Sir01

import numpy as np
# Let's calculate the cost for the hypothesis above

h = lambda x, theta_0, theta_1: theta_0 + theta_1 * x

def cost[X, y, t0, t1]:
    m = len[X] # the number of the training samples
    c = np.power[np.subtract[h[X, t0, t1], y], 2]
    return [1 / [2 * m]] * sum[c]

X = dataset.values[:, 0]
y = dataset.values[:, 1]
print['J[Theta] = %2.2f' % cost[X, y, 84, 1.24]]
2

Tiêu đềSống sót0Master0. 5750001Miss0. 7027032Mr0. 1566733Mrs0. 7936514Khác0. 347826

import numpy as np
# Let's calculate the cost for the hypothesis above

h = lambda x, theta_0, theta_1: theta_0 + theta_1 * x

def cost[X, y, t0, t1]:
    m = len[X] # the number of the training samples
    c = np.power[np.subtract[h[X, t0, t1], y], 2]
    return [1 / [2 * m]] * sum[c]

X = dataset.values[:, 0]
y = dataset.values[:, 1]
print['J[Theta] = %2.2f' % cost[X, y, 84, 1.24]]
3

SurvivedPclassSexAgeSibSpParchFareEmbarkedTitle003022. 0107. 250001111138. 01071. 283313213126. 0007. 925002311135. 01053. 100003403035. 0008. 050001

Tại thời điểm này, chúng tôi sẽ xếp hạng các loại thuật toán học máy khác nhau trong Python bằng cách sử dụng

import matplotlib.pyplot as plt

fig = plt.figure[]

# Generate the data
theta_1 = np.arange[-10, 14, 0.1]

J_cost = []
for t1 in theta_1:
    J_cost += [ cost[X, y, 0, t1] ]

plt.plot[theta_1, J_cost]

plt.xlabel[r'$\theta_1$']
plt.ylabel[r'$J[\theta]$']

plt.show[]
1 để tạo một tập hợp các mô hình khác nhau. Sau đó, sẽ dễ dàng để xem cái nào hoạt động tốt nhất

  • Hồi quy logistic với số lượng đa thức khác nhau
  • Máy vectơ hỗ trợ với hạt nhân tuyến tính
  • Máy vectơ hỗ trợ với nhân đa thức
  • mạng lưới thần kinh

Đối với mỗi mô hình đơn lẻ, chúng tôi sẽ sử dụng xác thực $k$-fold

import numpy as np
# Let's calculate the cost for the hypothesis above

h = lambda x, theta_0, theta_1: theta_0 + theta_1 * x

def cost[X, y, t0, t1]:
    m = len[X] # the number of the training samples
    c = np.power[np.subtract[h[X, t0, t1], y], 2]
    return [1 / [2 * m]] * sum[c]

X = dataset.values[:, 0]
y = dataset.values[:, 1]
print['J[Theta] = %2.2f' % cost[X, y, 84, 1.24]]
4
import numpy as np
# Let's calculate the cost for the hypothesis above

h = lambda x, theta_0, theta_1: theta_0 + theta_1 * x

def cost[X, y, t0, t1]:
    m = len[X] # the number of the training samples
    c = np.power[np.subtract[h[X, t0, t1], y], 2]
    return [1 / [2 * m]] * sum[c]

X = dataset.values[:, 0]
y = dataset.values[:, 1]
print['J[Theta] = %2.2f' % cost[X, y, 84, 1.24]]
5____16

TênĐiểm tối thiểuĐiểm tối đaĐiểm trung bình2Tuyến tính SVM0. 7932960. 8212290. 8033520Hồi quy logistic0. 8268160. 8603350. 8469274Mạng thần kinh0. 8268160. 8603350. 8491621Hồi quy logistic với các giả thuyết đa thức0. 8547490. 8826820. 8692743RBF SVM0. 8435750. 8882680. 869274

Ok, vì vậy nghiên cứu thử nghiệm của chúng tôi nói rằng trình phân loại SVM với hạt nhân chức năng cơ sở hướng tâm [RBF] hoạt động tốt nhất. Bây giờ, chúng tôi có thể tuần tự hóa mô hình của mình và sử dụng lại nó trong các ứng dụng sản xuất

import numpy as np
# Let's calculate the cost for the hypothesis above

h = lambda x, theta_0, theta_1: theta_0 + theta_1 * x

def cost[X, y, t0, t1]:
    m = len[X] # the number of the training samples
    c = np.power[np.subtract[h[X, t0, t1], y], 2]
    return [1 / [2 * m]] * sum[c]

X = dataset.values[:, 0]
y = dataset.values[:, 1]
print['J[Theta] = %2.2f' % cost[X, y, 84, 1.24]]
7

Học máy không phức tạp, nhưng nó là một lĩnh vực nghiên cứu rất rộng và nó đòi hỏi kiến ​​thức về toán học và thống kê để nắm bắt tất cả các khái niệm của nó

Hiện tại, học máy và học sâu là một trong những chủ đề thảo luận nóng nhất ở Thung lũng Silicon và là nguồn sống của hầu hết mọi công ty khoa học dữ liệu, chủ yếu là vì chúng có thể tự động hóa nhiều nhiệm vụ lặp đi lặp lại bao gồm nhận dạng giọng nói, lái xe, giao dịch tài chính,

Giờ đây, bạn có thể sử dụng kiến ​​thức này và giải quyết các thử thách trên Kaggle

Đây là phần giới thiệu rất ngắn gọn về các thuật toán học máy có giám sát. May mắn thay, có rất nhiều khóa học trực tuyến và thông tin về các thuật toán máy học. Cá nhân tôi khuyên bạn nên bắt đầu với khóa học của Andrew Ng trên Coursera

Tài nguyên

  • Khóa học của Andrew Ng trên Coursera
  • Bộ dữ liệu Kaggle
  • Một danh sách đọc học tập sâu
  • Danh sách sách miễn phí về thuật toán học máy, khai thác dữ liệu, học sâu và các chủ đề liên quan
  • Giới thiệu về lý thuyết học máy và ứng dụng của nó. Hướng dẫn trực quan với các ví dụ

Có liên quan. Máy móc và Niềm tin. Cách giảm thiểu sự thiên vị của AI

Hiểu những điều cơ bản

Học máy hoạt động như thế nào?

Các thuật toán học máy tự động hình thành các mô hình bằng cách sử dụng phân tích thống kê, trái ngược với các thuật toán mã hóa cứng truyền thống. Điều này cho phép họ phát triển theo thời gian khi họ tìm kiếm các mẫu trong dữ liệu và đưa ra dự đoán về phân loại của họ

Học máy có thể được sử dụng để làm gì?

Các ứng dụng của học máy gần như vô hạn. Nó có thể được sử dụng cho mọi thứ, từ dự đoán thời tiết đơn giản và phân cụm dữ liệu cho đến học các tính năng phức tạp;

Sự khác biệt giữa phân loại được giám sát và không được giám sát là gì?

Phân loại được giám sát cần nhãn cho dữ liệu đào tạo. Một hình là con mèo, hình còn lại là con chó. Phân loại không giám sát là nơi thuật toán tìm thấy các đặc điểm chung và tự phân tách dữ liệu. Nó sẽ không cho chúng ta biết rõ ràng rằng hình ảnh là một con mèo, nhưng nó sẽ có thể tách mèo ra khỏi chó

Học có giám sát là gì vs. học tập không giám sát?

Học có giám sát là nơi bạn nói rõ ràng với thuật toán câu trả lời đúng là gì, để thuật toán có thể học và có thể dự đoán câu trả lời cho dữ liệu chưa từng thấy trước đó. Học không giám sát là nơi thuật toán phải tự tìm ra câu trả lời

Tôi có thể học các kỹ thuật máy học ở đâu?

Nơi tốt nhất để bắt đầu tìm hiểu về học máy là xem khóa học Ng của Andrew trên Coursera, được liên kết trong các tài nguyên ở cuối bài viết. Từ đó, bắt đầu thực hiện các thử thách trên Kaggle để phát triển trực giác tốt hơn về các khuôn khổ và cách tiếp cận khác nhau

Làm cách nào để biết nên sử dụng thuật toán máy học nào?

Có rất nhiều yếu tố cần xem xét khi chọn thuật toán phù hợp. kích thước của tập dữ liệu, bản chất của dữ liệu, tốc độ so với độ chính xác, v.v. Cho đến khi bạn phát triển trực giác của riêng mình, bạn có thể sử dụng các cheatsheet hiện có như scikit-learning cung cấp

Thuật toán học máy trong Python là gì?

Hồi quy tuyến tính là một trong những thuật toán Máy học được giám sát trong Python, thuật toán này quan sát các tính năng liên tục và dự đoán kết quả. Tùy thuộc vào việc nó chạy trên một biến hay trên nhiều tính năng, chúng ta có thể gọi nó là hồi quy tuyến tính đơn giản hoặc hồi quy tuyến tính bội.

Có bao nhiêu thuật toán học máy trong Python?

Top 10 Thuật toán học máy trong Python - ActiveState.

Các thuật toán học máy được mã hóa bằng gì?

Java và JavaScript . Java và JavaScript là những công cụ mạnh mẽ, nhanh chóng để phát triển các thuật toán học máy, kỹ thuật hồi quy và xử lý dữ liệu.

Python hay C++ tốt hơn cho máy học?

Python cũng là ngôn ngữ hàng đầu để phân tích dữ liệu và máy học. Mặc dù cũng có thể sử dụng C++ cho mục đích học máy, nhưng đó không phải là một lựa chọn tốt. Về tính đơn giản, Python dễ sử dụng hơn nhiều và có một hệ thống hỗ trợ tuyệt vời khi nói đến các khung AI và ML.

Chủ Đề