рдкрде рдорд╢реАрди: рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЖрдЗрдбрд┐рдпрд╛

рдкреНрд░рд╛рдЧрд┐рддрд┐рд╣рд╛рд╕


рд▓рдЧрднрдЧ 15 рд╕рд╛рд▓ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдореВрд▓рднреВрдд рд░рд╛рд╕реНрддреЛрдВ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦрд╛ - рдРрд╕реЗ рд╕рдореВрд╣ рдЬреЛ рдХрдиреЗрдХреНрдЯрд┐рд╡рд┐рдЯреА рджреНрд╡рд╛рд░рд╛ рдЯреЛрдкреЛрд▓реЙрдЬрд┐рдХрд▓ рд╕реНрдкреЗрд╕ рдХреЛ рдЕрд▓рдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдмрд╛рдХреА рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рд╡реЗ рдПрдХ рд░реЗрдЬрд┐рд╕реНрдЯрд░ рдФрд░ рдПрдХ рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░рд┐рдпрд░ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд╕рд╛рде рдЖрдП - рдмрд┐рдирд╛ рдХрд┐рд╕реА рднреА рдЕрдиреБрдХреВрд▓рди рдХреЗ рдирдореВрдиреЗ рдХреЗ рднрдВрдбрд╛рд░рдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░ред

рдЖрдЧреЗ рдХрд╛ рд╡рд┐рд╡рд░рдгред

рд╡рд┐рдЪрд╛рд░ рдФрд░ рдЕрдиреБрдорд╛рди


рдЪреВрдБрдХрд┐ рдореВрд▓рднреВрдд рдорд╛рд░реНрдЧ рдПрдХ рдЪрдпрдирд┐рдд рдмрд┐рдВрджреБ рд╕реЗ рдЫреЛрд░реЛрдВ рд╣реИрдВ, рдФрд░ рдЙрди рдкрд░ рддреБрд▓реНрдпрддрд╛ рд╣реИ, рддреЛ рдРрд╕реЗ рдЫреЛрд░реЛрдВ рдХреЛ рдбреЗрдЯрд╛ рдореЗрдВ рдХреИрд╕реЗ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдФрд░ рдХреНрдпрд╛ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ?

рдХреЗрдПрдирдПрди рдФрд░ рдПрд╕рд╡реАрдПрдо рдХреЗ рд╕рд╛рде рд╕рд╛рджреГрд╢реНрдп рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдЪрд╛рд░ рдЖрдпрд╛ - "рдЕрдиреБрд░реВрдк" рдПрд▓реНрдЧреЛрд░рд┐рджрдоред рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд▓реВрдк рдХреЛ "рдкрд╛рдЗрдк" рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдП, рдПрдХ рдбреЗрдЯрд╛ рдкреЙрдЗрдВрдЯ рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рдПрдХ рд╕рд┐рд▓реЗрдВрдбрд░, рдФрд░ рдЬреЛ рдкрд╛рдЗрдк рдореЗрдВ рдЧрд┐рд░ рдЧрдпрд╛, рдЙрд╕реЗ рдЙрд╕реА рд╡рд░реНрдЧ рдХреЛ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдкрде рдХреЗ рдЗрди рджреЛ рдмрд┐рдВрджреБрдУрдВ (рдЕрдм рдореМрд▓рд┐рдХ рдирд╣реАрдВ) рд╣реИ? рд╡рд░реНрдЧреЛрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рдкрд╛рдЗрдк" рдЗрддрдиреА рдЪреМрдбрд╝рд╛рдИ рдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП ... рдФрд░ рд╕реАрдорд╛ рдореЗрдВ рдпрд╣ рдПрдХ рд╕реАрдзреА рд░реЗрдЦрд╛ рд╣реИред рдПрдХ рдирдП, рдЕрдЬреНрдЮрд╛рдд рдмрд┐рдВрджреБ рдХреА рджреВрд░реА рд░рд╛рд╕реНрддреЗ рдХреЗ рд╕рд╛рде рдиреНрдпреВрдирддрдо рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдлрд┐рд░ рд╣рдо рдЗрд╕реЗ рдкрде рдХреЗ рд╕рдорд╛рди рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖рддрд╛ рджреЗ рд╕рдХрддреЗ рд╣реИрдВред



рдбреЗрдЯрд╛ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдмреАрдЪ рдПрдХ рд╕реАрдзреА рд░реЗрдЦрд╛ рдкрд░ рдПрдХ рдмрд┐рдВрджреБ рдХреЛ рдкреНрд░рдХреНрд╖реЗрдкрд┐рдд рдХрд░рдХреЗ рдФрд░ рдПрдХ рд╣реА рдЕрдиреБрдкрд╛рдд рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд▓рдХреНрд╖реНрдп рдорд╛рди рдкреНрд░рдХреНрд╖реЗрдкрд┐рдд рдХрд░рдХреЗ рдПрдХ рд░реЗрдЬрд┐рд╕реНрдЯрд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рдХреНрд╖реЗрдкрдг рдкрде рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рд╣реИред

рдирд┐рд░реНрдорд╛рдг рдХреА рдпрд╣ рд╡рд┐рдзрд┐ рдкреВрд░реЗ рдирдореВрдиреЗ рдХреЛ рдпрд╛рдж рдХрд░рддреА рд╣реИ рдФрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕реЗрдЯ рдкрд░ рд╕рдЯреАрдХ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред

рдЖрджрд┐рдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


рдкрде рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХреИрд╕реЗ рдХрд░реЗрдВ? рдореИрдВрдиреЗ рдЕрдзрд┐рдХрддрдо рддрддреНрд╡ рдХреЛ рдорд╛рдирджрдВрдб рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд▓рд┐рдпрд╛, рдФрд░ рдкреНрд░рд╛рдкреНрдд рдкрде рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рдирд┐рдХрдЯрддрдо рдХреА рдЦреЛрдЬ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ред рдЕрдВрдд рдореЗрдВ - рд╢реБрд░реБрдЖрдд рдХреЗ рд╕рд╛рде рдмрдВрдж рд╣реБрдЖ (рдмреЗрд╢рдХ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд╣реА)ред

рдХрд╝реАрдордд рд▓рдЧрд╛рдиреЗрд╡рд╛рд▓рд╛
рдпрд╣ рдХреЛрдб рдХрд╛ рдкрд╣рд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ, рдиреАрдЪреЗ рдЕрджреНрдпрддрди рдиреЛрдЯрдмреБрдХ рджреЗрдЦреЗрдВред

class PathMachine(BaseEstimator): def __init__(self, norm=np.linalg.norm, classify=False): self.norm = norm self.classify = classify def find_start(self, X): index_max = None value_max = -np.inf for index, x in enumerate(X): value = self.norm(x) if value > value_max: index_max = index value_max = value return index_max def find_next(self, point, target, X, y): index_min = None value_min = np.inf for index, x in enumerate(X): if self.classify and (y[index] != target): continue value = self.norm(x - point) if value < value_min: index_min = index value_min = value return index_min def fit(self, X, y): X = np.copy(X) y = np.copy(y).flatten() self.paths = {} if self.classify else [] start_index = self.find_start(X) start_value = X[start_index] start_target = y[start_index] X = np.delete(X, start_index, axis=0) y = np.delete(y, start_index, axis=0) while len(X) > 0: next_index = self.find_next(start_value, start_target, X, y) if self.classify and next_index is None: start_index = self.find_start(X) start_value = X[start_index] start_target = y[start_index] continue next_target = y[next_index] if self.classify: if not next_target in self.paths: self.paths[next_target] = [] self.paths[next_target].append({ 'start': start_value, 'next': X[next_index] }) else: self.paths.append({ 'start': start_value, 'next': X[next_index], 'value': start_target, 'target': next_target }) start_value = X[next_index] start_target = y[next_index] X = np.delete(X, next_index, axis=0) y = np.delete(y, next_index, axis=0) if self.classify: self.paths[start_target].append({ 'start': start_value, 'next': self.paths[start_target][0]['start'] }) else: self.paths.append({ 'start': start_value, 'next': self.paths[0]['start'], 'value': start_target, 'target': self.paths[0]['target'] }) return self def predict(self, X): result = [] for x in X: if self.classify: predicted = None min_distance = np.inf for target in self.paths: for path in self.paths[target]: point = x - path['start'] line = path['next'] - path['start'] if np.allclose(self.norm(line), 0): continue direction = line / self.norm(line) product = np.dot(point, direction) projection = product * direction distance = self.norm(projection - point) if distance < min_distance: predicted = target min_distance = distance result.append(predicted) else: predicted = None min_distance = np.inf for path in self.paths: point = x - path['start'] line = path['next'] - path['start'] if np.allclose(self.norm(line), 0): continue direction = line / self.norm(line) product = np.dot(point, direction) projection = product * direction parameter = np.sign(product) * self.norm(projection) /\ self.norm(line) distance = self.norm(projection - point) if distance < min_distance: predicted = (1 - parameter) * path['value'] +\ parameter * path['target'] min_distance = distance result.append(predicted) return np.array(result) def score(self, X, y): if self.classify: return f1_score(y.flatten(), self.predict(X), average='micro') else: return r2_score(y.flatten(), self.predict(X)) 


рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ (рдФрд░ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ), рдпрд╣ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ_ рдЙрд╕реА рддрд░рд╣ - рдЬреИрд╕реЗ рдХрд┐ 1 - рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рджреВрд░реАред рд▓реЗрдХрд┐рди рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рдореМрдХрд╛ рдирд╣реАрдВ рдЖрдпрд╛, рдЗрд╕рд▓рд┐рдП ...

рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг


рдореИрдВрдиреЗ рдХреНрд▓рд╛рд╕рд┐рдХ рдмреЛрд╕реНрдЯрди рд╣рд╛рдЙрд╕рд┐рдВрдЧ рдФрд░ рдЖрдЗрд░рд┐рд╕ рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХреА, рдФрд░ рдЖрдзрд╛рд░ рд░реЗрдЦрд╛ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рд░рд┐рдЬ рдФрд░ рд▓реЙрдЬрд┐рд╕реНрдЯрд┐рдХ рд░реАрдЬрдирд░реЗрд╢рди рдХреЛ рдЪреБрдирд╛ред рдЦреИрд░, рдХреНрдпрд╛, рдЕрдЧрд░ред

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЬреНрдпреВрдкрд┐рдЯрд░ рдиреЛрдЯрдмреБрдХ рджреЗрдЦреЗрдВ ред

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ: рдкреНрд░рддрд┐рдЧрд╛рдореА рдиреЗ рдмрджрддрд░ рдХрд╛рдо рдХрд┐рдпрд╛, рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░ рдиреЗ рдмреЗрд╣рддрд░ рдХрд╛рдо рдХрд┐рдпрд╛ред
рдЕрджреНрдпрддрди: StandardScaler рдХреЗ рдмрд╛рдж, regressor рдиреЗ рдмреЗрд╣рддрд░ рдХрд╛рдо рдХрд┐рдпрд╛ред

рдореИрдВ рд╕рд┐рдВрдереЗрдЯрд┐рдХ рдбреЗрдЯрд╛рд╕реЗрдЯ рдкрд░ рднреА рд╕рд╡рд╛рд░ рд╣реБрдЖред рдЬрдВрдЧрд▓ рдореЗрдВ рдЖрдо рддреМрд░ рдкрд░ рдХреБрдЫ рд╣реЛрддрд╛ рд╣реИ, рд╡рд╣ рд╣реИ рдЬрд▓рд╛рдК рд▓рдХрдбрд╝реАред

рд▓реЗрдХрд┐рди рдпрд╣ рджреЗрдЦрд╛ рдЧрдпрд╛ рдерд╛:

  1. рд░реЗрдЬрд┐рд╕реНрдЯрд░ рдЫреЛрдЯреЗ рдЖрдпрд╛рдореЛрдВ рдХреЗ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ,
  2. рд░рдЬрд┐рд╕реНрдЯреНрд░рд╛рд░ рдФрд░ рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░ рджреЛрдиреЛрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реАрдорд╛ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╢реЛрд░ рдХреЗ рдкреНрд░рддрд┐ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реЛрддреЗ рд╣реИрдВ,
  3. рд░рдЬрд┐рд╕реНрдЯреНрд░рд╛рд░, рд▓рд╛рдЗрди рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╕рдВрджрд┐рдЧреНрдз рдмрд╣реБрд╡рд┐рдзрддрд╛ (рдмреЛрд╕реНрдЯрди рд╣рд╛рдЙрд╕рд┐рдВрдЧ рдореЗрдВ),
  4. рдирд┐рд░реНрдорд╛рдг рдХреЗ рджреНрд╡рд╛рд░рд╛, рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░ рдиреЗ рдЪрдВрджреНрд░рдорд╛ рдХреЗ рдПрдХ рд░реИрдЦрд┐рдХ рдЕрд╡рд┐рднрд╛рдЬреНрдп рд╕реЗрдЯ рдкрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ (рд╕рднреА рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ ... :)) рдХрд╛рдо рдХрд┐рдпрд╛ред

рдирд┐рд╖реНрдХрд░реНрд╖, рдкреЗрд╢реЗрд╡рд░реЛрдВ, рд╡рд┐рдкрдХреНрд╖ рдФрд░ рдкреНрд░рдпреЛрдЬреНрдпрддрд╛


рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдХреЛрдИ рд▓рд╛рдн рдирд╣реАрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдБред рджреЛрдиреЛрдВ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдФрд░ рдЧрдгрд┐рддреАрдп рд░реВрдк рд╕реЗред рд╢рд╛рдпрдж рдпрд╣ рдХреБрдЫ рдФрд░ рд╕рдордЭрджрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рддрджрдиреБрд╕рд╛рд░, рдореБрдЭреЗ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдпреЛрдЬреНрдпрддрд╛ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддреА рд╣реИред рдХреНрдпрд╛ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рдмрд┐рдирд╛ рдмрд╣реБрдд рдЫреЛрдЯреЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ ...

рдХрдИ рдиреБрдХрд╕рд╛рди рд╣реИрдВ: рдкреВрд░реЗ рдбреЗрдЯрд╛рд╕реЗрдЯ рдХреЛ рд╕реНрдореГрддрд┐ рдореЗрдВ рд░рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдХреА рдХреНрд╖рдорддрд╛ рдПрдХреНрд╕рдЯреНрд░рдкрд▓реЗрд╢рди рдкрд░ рдмрдирд╛рдИ рдЧрдИ рд╣реИ, рдореБрдЦреНрдп рдФрд░ рдПрдХрдорд╛рддреНрд░ рд╣рд╛рдЗрдкрд░рдкреИрд░рдореАрдЯрд░ - рдорд╛рдирджрдВрдб - рд╡рд┐рд╢реЗрд╖ рдЪрдпрди-рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдЙрддреНрддрд░рджрд╛рдпреА рдирд╣реАрдВ рд╣реИред

рд▓реЗрдХрд┐рди, рд╡реИрд╕реЗ рднреА, рдореЗрд░реЗ рд▓рд┐рдП рдкреНрд░рд╛рдкреНрдд рдПрдХ рдЖрд╢реНрдЪрд░реНрдп рдерд╛, рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред

Source: https://habr.com/ru/post/hi429974/


All Articles