接前幾天我們已經將資料大致上分類完成
接下來我們會由資料分析跟回歸出發的 支撐向量機(Support Vector Machines, SVM) 的非線性分類著手
對於那些不能被線性分隔的資料集,將資料從原始的特徵空間映射到一個更高維度的特徵空間中,使得在這個高維空間中可以找到一個超平面來分隔資料。
[SVM 超平面投影示意圖]
參考網址 : https://sark12500.blogspot.com/2019/03/ml-svm.html
也就是當我們資料進行分群篩選之後,需要藉由演算去推測獲取的資料是否符合預期
接下來我們暖暖手,寫點程式碼
舉例來說,現在不知道有幾個寶特瓶(600cc),裡面裝的東西有可能是水(重量1.5)、冰(重量1)、果汁(重量2.25),可能裝滿(600cc)、一半(300cc)或沒裝(0cc)
請問最輕的瓶子是誰,狀態是甚麼?
(如果替換成銷售成本,就可以是成本最低獲利潤最高的!)
主成程式
Console.WriteLine("請輸入瓶子的數量:");
int bottleCount = int.Parse(Console.ReadLine());
List<Bottle> bottles = GenerateRandomBottles(bottleCount);
double minWeight = double.MaxValue;
Bottle lightestBottle = null;
foreach (Bottle bottle in bottles)
{
double weight = bottle.GetWeight();
if (weight < minWeight)
{
minWeight = weight;
lightestBottle = bottle;
}
}
Console.WriteLine($"隨機生成了 {bottleCount} 個瓶子:");
foreach (var bottle in bottles)
{
Console.WriteLine($"{bottle.GetDescription()},重量為:{bottle.GetWeight()} 克");
}
Console.WriteLine($"最輕的瓶子是:{lightestBottle.GetDescription()}, 重量為:{minWeight} 克。");
Console.ReadKey();
隨機生成瓶子本身的內容
static List<Bottle> GenerateRandomBottles(int count)
{
List<Bottle> bottles = new List<Bottle>();
Random random = new Random();
for (int i = 0; i < count; i++)
{
// 隨機生成瓶子的內容和裝填情況
BottleContent content = (BottleContent)random.Next(0, 3);
BottleFillLevel fillLevel = (BottleFillLevel)random.Next(0, 3);
bottles.Add(new Bottle(content, fillLevel));
}
return bottles;
}
瓶子狀態權重
class Bottle
{
private BottleContent content;
private BottleFillLevel fillLevel;
private Dictionary<BottleContent, double> contentWeights = new Dictionary<BottleContent, double>()
{
{ BottleContent.Water, 1.5 },
{ BottleContent.Ice, 1 },
{ BottleContent.Juice, 2.25 }
};
private Dictionary<BottleFillLevel, double> fillLevels = new Dictionary<BottleFillLevel, double>()
{
{ BottleFillLevel.Full, 600 },
{ BottleFillLevel.Half, 300 },
{ BottleFillLevel.Empty, 0 }
};
public Bottle(BottleContent content, BottleFillLevel fillLevel)
{
this.content = content;
this.fillLevel = fillLevel;
}
public double GetWeight()
{
return contentWeights[content] * fillLevels[fillLevel];
}
public string GetDescription()
{
return $"{content},{fillLevel}";
}
}
瓶子狀態列舉
enum BottleContent { Water, Ice, Juice }
enum BottleFillLevel { Full, Half, Empty }
希望能夠堅持完成連續30天的挑戰,也希望如果有錯也請各位高手不吝嗇指教!!