• 🚀 Đăng ký ngay để không bỏ lỡ những nội dung chất lượng! 💯 Hoàn toàn miễn phí!

Có Video Toán và thuật toán mỗi ngày

đại khái là khi đo sản phẩm. phần mềm sẽ tự động nhận biết được vị trí trong vùng màu đỏ.
có thê không cần ml nhưng ý là t muốn nó hiểu được vị trí cần đo.
Trên cái biểu đồ đó trục x là gì trục y là gì? Khi đo thì máy đo đc thông số gì và cần dự đoán cái gì?
 
Trên cái biểu đồ đó trục x là gì trục y là gì? Khi đo thì máy đo đc thông số gì và cần dự đoán cái gì?
trục x là index của dữ liệu. trục y là giá trị của dữ liệu(đường kính).
t muốn tìm giá trị khoảng nằm ngang.
0bzV9Tj.jpeg
 
rồi cột 0, côt 1 với cột EM12000 là cái gì? đưa đây cái đề bài tao đọc cho nó nhanh
File data có 3 cột. cột 0: vị trí PLC out ra thôi, không cần quan tâm. cột giá trị 1 cũng không cần quan tâm. chỉ cần quan tâm cột dữ liệu thôi.
dữ liệu là đường kính của sản phẩm. các giá trị mà vị vọt lên bất thường có thể là bụi bám vào sản phẩm.
sản phẩm nào cũng sẽ có đoạn đi ngang. cần tìm đoạn đi ngang đó.
 
File data có 3 cột. cột 0: vị trí PLC out ra thôi, không cần quan tâm. cột giá trị 1 cũng không cần quan tâm. chỉ cần quan tâm cột dữ liệu thôi.
dữ liệu là đường kính của sản phẩm. các giá trị mà vị vọt lên bất thường có thể là bụi bám vào sản phẩm.
sản phẩm nào cũng sẽ có đoạn đi ngang. cần tìm đoạn đi ngang đó.
ah tao hiểu rồi, nhưng cái đoạn nằm ngang đó là có một đoạn hay nhiều đoạn?
 
Ví dụ dữ liệu nhiều outlier. Bụi bám vào nhiều. Có cách nào để dữ liệu mượt không.
Loại bỏ triệt để được oulier
Outliner thì dễ mà, dùng IQR ấy. Nếu ko dùng IQR thì dùng mấy thuật toán phân cụm như KNN, thằng nào ko thuộc cụm nào thì nó là outlier
 
Outliner thì dễ mà, dùng IQR ấy. Nếu ko dùng IQR thì dùng mấy thuật toán phân cụm như KNN, thằng nào ko thuộc cụm nào thì nó là outlier
ví dụ như dữ liệu trên t gửi.
t dùng thử IQR rồi. nhưng vẫn còn các outlier. khong hết được.
nên khi t tính để tìm đoạn đi ngang bị sai.

t dùng liner regession để tìm. góc nào lớn nhất thì xác định điểm thay đổi.
 
ví dụ như dữ liệu trên t gửi.
t dùng thử IQR rồi. nhưng vẫn còn các outlier. khong hết được.
nên khi t tính để tìm đoạn đi ngang bị sai.

t dùng liner regession để tìm. góc nào lớn nhất thì xác định điểm thay đổi.
sao linear regression lại giải đc cái này nhỉ
 
sao linear regression lại giải đc cái này nhỉ
Python:
df = data_cleaned
# Chia dữ liệu thành các đoạn nhỏ và thực hiện hồi quy tuyến tính trên từng đoạn
window_size = 50
slopes = []

for i in range(len(df) - window_size):
    x = np.arange(window_size).reshape(-1, 1)
    y = df["Diameter"].iloc[i:i + window_size].values.reshape(-1, 1)
    model = LinearRegression().fit(x, y)
    slopes.append(model.coef_[0][0])

# Tìm điểm mà tại đó hệ số góc của hồi quy tuyến tính thay đổi đáng kể
slopes = np.array(slopes)
change_point = np.argmax(np.abs(np.diff(slopes)))

# In ra điểm thay đổi
print(f"Điểm thay đổi của dữ liệu: {change_point + window_size // 2}")

# In ra điểm thay đổi
change_point_index = change_point + window_size // 2
print(f"Điểm thay đổi của dữ liệu: {change_point_index}")

# Điểm cuối cùng của dữ liệu
end_point_index = len(df) - 1
print(f"Điểm cuối cùng của dữ liệu: {end_point_index}")

# Tính khoảng cách giữa điểm thay đổi và điểm cuối cùng
distance = end_point_index - change_point_index
distance_adjusted = round(distance * 0.1, 1)
print(f"Khoảng cách giữa điểm thay đổi và điểm cuối cùng: {distance} vị trí index")

# Vẽ biểu đồ
plt.figure(figsize=(10, 5))
plt.plot(df["Diameter"].values, label="Data")
plt.axvline(x=change_point + window_size // 2, color='red', linestyle='--', label='Change Point')
plt.axvline(x=end_point_index, color='blue', linestyle='--', label='End Point')

# Vẽ mũi tên hai chiều giữa hai điểm
plt.annotate('', xy=(change_point_index, df["Diameter"].max()/2),
             xytext=(end_point_index, df["Diameter"].max()/2),
             arrowprops=dict(arrowstyle='<->', color='green'))

# Thêm chú thích về khoảng cách
plt.text((change_point_index + end_point_index) / 2, df["Diameter"].max()/2+10,
         f'Khoảng cách: {distance_adjusted}' 'mm',
         horizontalalignment='center', fontsize=8, color='green')

plt.title("Chart dữ liệu")
plt.xlabel("Index")
plt.ylabel("Diameter")
plt.legend()
plt.grid(True)
plt.show()
 
đoạn code trên t dùng liner để tìm hệ số góc thay đổi lớn nhất. Nhưng mà dữ liệu nhiễu sẽ bị sai
 
Solution bài này
Python:
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def helper(self, inorder: List[int], postorder: List[int]) -> Optional[TreeNode]:
        if len(inorder) == 0 or len(postorder) == 0:
            return None
        if len(inorder) == 1:
            return TreeNode(inorder[0])
        if len(postorder) == 1:
            return TreeNode(postorder[0])
        
        rootNodeVal = postorder[len(postorder) - 1]
        rootPos = 0
        for i in range(len(inorder)):
            if inorder[i] == rootNodeVal:
                rootPos = i
                break
        leftInorder = inorder[:rootPos]
        rightInorder = []
        if rootPos + 1 < len(inorder):
            rightInorder = inorder[rootPos + 1:]
        leftPostorder = postorder[:len(leftInorder)]
        rightPostorder = postorder[len(leftInorder):len(postorder) - 1]
        leftNode = self.helper(leftInorder, leftPostorder)
        rightNode = self.helper(rightInorder, rightPostorder)
        return TreeNode(rootNodeVal, leftNode, rightNode)
    def buildTree(self, inorder: List[int], postorder: List[int]) -> Optional[TreeNode]:
        return self.helper(inorder, postorder)
 

Có thể bạn quan tâm

Top