<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _extract_features(self):
 """ Extracts and sets the feature data from the log file necessary for a reduction """

        for parsed_line in self.parsed_lines:

            # If it's ssh, we can handle it
            if parsed_line.get('program') == 'sshd':
                result = self._parse_auth_message(parsed_line['message'])

                # Add the ip if we have it
                if 'ip' in result:
                    self.features['ips'].append(result['ip'])

                    # If we haven't seen the ip, add it
                    if result['ip'] not in self.ips_to_pids:
                        # Make the value a list of pids
                        self.ips_to_pids[result['ip']] = [parsed_line['processid']]
                    else:
                        # If we have seen the ip before, add the pid if it's a new one
                        if parsed_line['processid'] not in self.ips_to_pids[result['ip']]:
                            self.ips_to_pids[result['ip']].append(parsed_line['processid'])