怎么在用户输入之后和MySQL数据库当中的其他股票进行相似度比较呢?我现在已经实现了将数据库当中的数据转化为数据,那怎么将用户输入的数据转化为数组呢?并且调用函数进行相似度比较
<?php
$mysqli=new mysqli('localhost','root','123456','gupiaoshuju');
$result =$mysqli->query("SELECT * FROM stock");
$stock = array();
while ($row =$result->fetch_assoc()) {
$stock[] = $row;
}
print_r($stock);
$hangye = $_POST['hangye'];
$meigushouyi=$_POST['meigushouyi'];
$yingyezongshouru=$_POST['yingyezongshouru'];
$jinglirun=$_POST['jinglirun'];
$meigusjingzichan=$_POST['meigusjingzichan'];
$jingzichansyl=$_POST['jingzichansyl'];
$xsmll=$_POST['xsmll'];
$user_array=explode($hangye,$meigushouyi,$yingyezongshouru,$jinglirun,$meigusjingzichan,$jingzichansyl,$xsmll);
$user_input = explode(", ", $_POST['input']); // 从表单中获取用户输入
$results = array();
foreach ($stocks as $stock) {
$data = explode(", ", $stock['data']);
$similarity = cosine_similarity($user_input, $data);
$results[$stock['name']] = $similarity;
}
//计算余弦相似度函数
function cosine_similarity($a,$stock ) {
$dot_product = 0.0;
$magnitude1 = 0.0;
$magnitude2 = 0.0;
foreach ($a as $key => $value) {
$magnitude1 += $value * $value;
if (isset($stock[$key])) {
$dot_product += $value * $stock[$key];
}
}
foreach ($stock as $key => $value) {
$magnitude2 += $value * $value;
}
if ($magnitude1 == 0.0 || $magnitude2 == 0.0) {
return 0.0;
}
return $dot_product / (sqrt($magnitude1) * sqrt($magnitude2));
}
// 计算第一个数组与其他数组的相似度,并将结果保存在 $similarities 数组中
$similarities = array();
$user_array = $vectors[0];
foreach ($vectors as $key => $stock) {
$similarity = cosine_similarity($user_array, $stock);
$similarities[$key] = $similarity;
}
// 对相似度进行排序,并输出前两项
arsort($similarities);
$top_similarities = array_slice($similarities, 0, 2, true);
foreach ($top_similarities as $key => $similarity) {
echo "Array $key: similarity = $similarity\n";
}
以下是一个示例代码:
// 用户输入的数据
$user_input = array(
"行业" => "医疗器械",
"每股收益" => 0.78,
"营业总收入" => 20000000,
"净利润" => 5000000,
"每股净资产" => 2.34,
"净资产收益率" => 0.12,
"销售毛利率" => 0.45
);
// 假设您的数据集中包含三只股票,分别是 a、b 和 c。
// 每支股票都有与用户输入相同的参数,这里只列出部分参数。
$stock_data = array(
"a" => array(
"行业" => "医疗器械",
"每股收益" => 0.82,
"营业总收入" => 18000000,
"净利润" => 4500000,
"每股净资产" => 2.20,
"净资产收益率" => 0.10,
"销售毛利率" => 0.43
),
"b" => array(
"行业" => "医疗器械",
"每股收益" => 0.76,
"营业总收入" => 21000000,
"净利润" => 5500000,
"每股净资产" => 2.42,
"净资产收益率" => 0.14,
"销售毛利率" => 0.48
),
"c" => array(
"行业" => "生物制药",
"每股收益" => 0.85,
"营业总收入" => 25000000,
"净利润" => 6000000,
"每股净资产" => 2.55,
"净资产收益率" => 0.16,
"销售毛利率" => 0.51
)
);
// 计算与用户输入最为相似的股票
$highest_similarity = 0;
$most_similar_stock = "";
foreach ($stock_data as $stock_name => $stock_parameters) {
$similarity = cosine_similarity($user_input, $stock_parameters);
if ($similarity > $highest_similarity) {
$highest_similarity = $similarity;
$most_similar_stock = $stock_name;
}
}
echo "与您的输入最为相似的股票是 $most_similar_stock,相似度为 $highest_similarity。";