Sta*_*yrr 4 python classification machine-learning coordinates pandas
我正在尝试建立ML分类模型,以便在注册帐户时检测欺诈。我手头上的数据是:名称,电子邮件地址,坐标(注册时IP地址的纬度和经度)和标签(欺诈与非欺诈)。这是我的数据集的简短摘要:
>>> dataset.summary
Index(['name', 'email','latitude','longitude','label'],dtype='object')
>>> dataset.shape
(93207, 4)
Run Code Online (Sandbox Code Playgroud)
到目前为止,我在理解模型训练时如何理解坐标变量方面遇到了麻烦。StackExchange上的一些用户建议使用正弦和余弦函数的某些组合将纬度和经度转换为X,Y和Z坐标。(即https://datascience.stackexchange.com/questions/13567/ways-to-deal-with-longitude-latitude-feature)但是我不知道在分类用例中是否真的需要这么做?我考虑过将每条记录的经度和纬度合并为1个变量。但是,某些区域的经度为负值。同样,一些欺诈者可能位于高纬度和经度的地区,而其他欺诈者可能位于低纬度和经度的地区。因此,将纬度和经度合并为1个变量可能对训练模型没有帮助?
我也可以将经纬度转换为城市名称。但是,如果我这样做了,那么一个城市的拼写将与另一个很远的城市相似,这可能又不利于训练模型。有什么建议么?
有多种方法可以解决此问题。您共享的链接讨论了以下事实:分别处理经纬度并对其进行特征缩放。该方法是好的,因为假设如果在球坐标中它们彼此靠近,那么在现实生活中它们实际上将彼此靠近。
但是你的问题就不同了。我想您需要知道如何处理模型中的经纬度。您可以按照以下方式进行。
并非所有的机器学习技术都需要您缩放或规范化功能。通常进行尺度归一化,以使模型相信所有特征均相等。这是必需的,因为某些机器学习模型基于距离量度,例如KNN,逻辑回归。因此,如果不执行功能的缩放,则可能会加深学习的难度。如果您正在使用某些基于树的模型,例如DT或Random-Forests或XGBoost或GBM,那么即使没有缩放比例,我也可以使用这些功能。因此,您可以直接在功能集中使用经纬度。
通常,在这种情况下,您可以使用某些聚类技术(例如KMeans)对经纬度进行聚类,cluster在数据集中创建一个称为特征的值,并为其值提供聚类数或距聚类中心的距离,然后删除经纬度列。您还可以为每个聚类创建一个单独的功能,并计算与每个聚类中心的距离,并将该距离存储到这些变量中。
如前所述,您还可以执行反向地理编码以获取城市和国家/地区名称。但就您而言,此方法可能不是欺诈的有力预测指标。但是仅供参考
from pygeocoder import Geocoder
location = Geocoder.reverse_geocode(12.9716,77.5946)
print("City:",location.city)
print("Country:",location.country)
Run Code Online (Sandbox Code Playgroud)
如果要素空间本质上是线性的,但如果要素空间是非线性的,则KMeans会沿着最大方差工作,因此请执行一些层次聚类而不是KMeans,则最好使用PAM,CLARA和DBSCAN之类的层次聚类。
| 归档时间: |
|
| 查看次数: |
2775 次 |
| 最近记录: |