Stellarsan
Chú bộ đội
trục x là index của dữ liệu. trục y là giá trị của dữ liệu(đường kính).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ì?
t muốn tìm giá trị khoảng nằm ngang.

trục x là index của dữ liệu. trục y là giá trị của dữ liệu(đường kính).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ì?
link data. xem giup t với.
có 1 file mà t tiền xử lý. không hết được các đoạn đột biến cao.
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.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
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?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 đó.
Có 1 đoạn đấy thôi.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?
Mày thử tìm hiểu cái này xem nha Bayesian Change Point Detection https://math.ou.edu/~pbretz/Changepoint_Detection.pdf. Lười đọc paper thì xài thử thư viện này xem https://github.com/deepcharles/rupturesCó 1 đoạn đấy thôi.
Công nhân đo đoạn cuối của sản phẩm.
cần tìm đoạn nằm ngang đấy để cắt đi.
t thử nhưng kết quả chưa tìm được đúng vị tríMày thử tìm hiểu cái này xem nha Bayesian Change Point Detection https://math.ou.edu/~pbretz/Changepoint_Detection.pdf. Lười đọc paper thì xài thử thư viện này xem https://github.com/deepcharles/ruptures
thì thử điều chỉnh các turning paramaters xemt thử nhưng kết quả chưa tìm được đúng vị trí
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.thì thử điều chỉnh các turning paramaters xem
Train model à hay phân tích.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à outlierVí 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
ví dụ như dữ liệu trên t gửi.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
m xem mấy comment bên trên giúp t. t cần tìm khoảng đi ngang trong dữ liệu.Train model à hay phân tích.
sao linear regression lại giải đc cái này nhỉ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ỉ
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()
Solution bài này
# 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)